<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/phone_type" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/network_name" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/sim_state" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/network_type" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
import android.app.Activity; import android.os.Bundle; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.TelephonyManager; import android.widget.TextView; public class NetworkDetector extends Activity { //SIM卡状态常量 private static final String SIM_ABSENT = "Absent"; //手机内无SIM卡 private static final String SIM_READY = "Ready"; //SIM卡已准备好 private static final String SIM_PIN_REQUIRED = "PIN required"; //需要SIM卡的PIN解锁 private static final String SIM_PUK_REQUIRED = "PUK required"; //需要SIM卡的PUK解锁 private static final String SIM_NETWORK_LOCKED = "Network locked"; //需要Network PIN解锁 private static final String SIM_UNKNOWN = "Unknown"; //状态未知 //网络类型常量 private static final String NETWORK_CDMA = "CDMA: Either IS95A or IS95B (2G)"; private static final String NETWORK_EDGE = "EDGE (2.75G)"; private static final String NETWORK_GPRS = "GPRS (2.5G)"; private static final String NETWORK_UMTS = "UMTS (3G)"; private static final String NETWORK_EVDO_0 = "EVDO revision 0 (3G)"; private static final String NETWORK_EVDO_A = "EVDO revision A (3G - Transitional)"; private static final String NETWORK_EVDO_B = "EVDO revision B (3G - Transitional)"; private static final String NETWORK_1X_RTT = "1xRTT (2G - Transitional)"; private static final String NETWORK_HSDPA = "HSDPA (3G - Transitional)"; private static final String NETWORK_HSUPA = "HSUPA (3G - Transitional)"; private static final String NETWORK_HSPA = "HSPA (3G - Transitional)"; private static final String NETWORK_IDEN = "iDen (2G)"; private static final String NETWORK_UNKOWN = "Unknown"; //手机制式类型常量 private static final String PHONE_CDMA = "CDMA"; private static final String PHONE_GSM = "GSM"; private static final String PHONE_NONE = "No radio"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.network_detector); //获取telephony系统服务,用于取得SIM卡和网络相关信息 final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); //更新界面上相关网络信息 updateViews(tm); //由于SIM卡状态和网络信息随时都可能发生变化,因此需要注册PhoneStateListener //来实时更新界面显示的信息。这里监听两个事件:LISTEN_SERVICE_STATE和LISTEN_DATA_CONNECTION_STATE //它们分别对应回调函数onServiceStateChanged和onDataConnectionStateChanged tm.listen(new PhoneStateListener() { @Override public void onDataConnectionStateChanged(int state, int networkType) { //数据连接状态改变可能导致网络类型的改变 updateViews(tm); } @Override public void onServiceStateChanged(ServiceState serviceState) { updateViews(tm); } }, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); } @Override protected void onResume() { super.onResume(); final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); updateViews(tm); } /** * 更新SIM卡状态和网络信息 * @param tm */ private final void updateViews(TelephonyManager tm) { TextView view = null; view = (TextView) findViewById(R.id.sim_state); view.setText("SIM State : " + mapSimStateToName(tm.getSimState())); view = (TextView) findViewById(R.id.network_type); view.setText("Network Type : " + mapNetworkTypeToName(tm.getNetworkType())); view = (TextView) findViewById(R.id.network_name); view.setText("Network Operator : " + tm.getNetworkOperatorName()); view = (TextView) findViewById(R.id.phone_type); view.setText("Phone Type : " + mapDeviceTypeToName(tm.getPhoneType())); } /** * 将手机制式值以字符串形式返回 * @param phoneType * @return */ private String mapDeviceTypeToName(int phoneType) { switch (phoneType) { case TelephonyManager.PHONE_TYPE_CDMA: return PHONE_CDMA; case TelephonyManager.PHONE_TYPE_GSM: return PHONE_GSM; case TelephonyManager.PHONE_TYPE_NONE: return PHONE_NONE; default: //不应该走到这个分支 return null; } } /** * 将网络类型值以字符串形式返回 * @param networkType * @return */ private String mapNetworkTypeToName(int networkType) { switch (networkType) { case TelephonyManager.NETWORK_TYPE_CDMA: return NETWORK_CDMA; case TelephonyManager.NETWORK_TYPE_EDGE: return NETWORK_EDGE; case TelephonyManager.NETWORK_TYPE_GPRS: return NETWORK_GPRS; case TelephonyManager.NETWORK_TYPE_UMTS: return NETWORK_UMTS; case TelephonyManager.NETWORK_TYPE_EVDO_0: return NETWORK_EVDO_0; case TelephonyManager.NETWORK_TYPE_EVDO_A: return NETWORK_EVDO_A; case TelephonyManager.NETWORK_TYPE_EVDO_B: return NETWORK_EVDO_B; case TelephonyManager.NETWORK_TYPE_1xRTT: return NETWORK_1X_RTT; case TelephonyManager.NETWORK_TYPE_HSDPA: return NETWORK_HSDPA; case TelephonyManager.NETWORK_TYPE_HSPA: return NETWORK_HSPA; case TelephonyManager.NETWORK_TYPE_HSUPA: return NETWORK_HSUPA; case TelephonyManager.NETWORK_TYPE_IDEN: return NETWORK_IDEN; case TelephonyManager.NETWORK_TYPE_UNKNOWN: default: return NETWORK_UNKOWN; } } /** * 将SIM卡状态值以字符串形式返回 * @param simState * @return */ private static String mapSimStateToName(int simState) { switch (simState) { case TelephonyManager.SIM_STATE_ABSENT: return SIM_ABSENT; case TelephonyManager.SIM_STATE_READY: return SIM_READY; case TelephonyManager.SIM_STATE_PIN_REQUIRED: return SIM_PIN_REQUIRED; case TelephonyManager.SIM_STATE_PUK_REQUIRED: return SIM_PUK_REQUIRED; case TelephonyManager.SIM_STATE_NETWORK_LOCKED: return SIM_NETWORK_LOCKED; case TelephonyManager.SIM_STATE_UNKNOWN: return SIM_UNKNOWN; default: //不应该走到这个分支 return null; } } }
相关推荐
TelephonyManager 类使用方法大全 TelephonyManager 类是 Android 中的一个系统服务,提供了许多关于手机的信息和功能,可以帮助开发者获取设备的各种状态和信息。本文将详细介绍 TelephonyManager 类的使用方法和...
电话管理器(TelephonyManager)是Android系统中的一个重要组件,主要负责处理与手机通话功能相关的各种信息和操作。它提供了一系列API,使开发者能够获取到设备的电话状态、SIM卡信息以及网络连接等数据,从而在...
在Android系统中,`TelephonyManager`类是用于获取设备电话功能相关信息的主要接口。通过这个类,开发者可以访问到手机的状态,例如网络连接状态、SIM卡信息以及来电、去电和接听电话的事件。本篇将深入探讨如何利用...
在Android系统中,`TelephonyManager`类是用于与设备的电话功能进行交互的重要接口。它提供了各种方法,让我们能够获取到与电话相关的硬件信息、状态以及服务功能。本篇文章将详细探讨`TelephonyManager`类的核心...
TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。 ...
在Android开发中,`TelephonyManager`是一个非常重要的类,它用于获取设备的电话相关信息,如SIM卡状态、运营商信息、手机类型等。然而,它的功能远不止这些,通过使用Java的反射机制,我们还可以访问到一些隐藏的...
前面文章介绍了如何使用JAVA的反射机制来调用蓝牙的隐藏API,本文继续来练习JAVA的反射机制,探秘TelephonyManager在Framework里包含却在SDK隐藏的几项功能。 先来看一下本文程序运行的效果图,如下所示: 本文程序...
在Android开发中,TelephonyManager类是用于获取设备电话功能相关信息的重要工具。它提供了一系列方法,可以帮助开发者获取手机硬件信息,如IMEI、SIM卡信息、网络运营商等。本篇文章将详细讲解如何使用...
在Android平台上,`TelephonyManager`是Android系统提供的一个关键接口,用于获取设备的电话功能信息。`TelephonyManagerSample.zip`很可能包含了一个示例项目,教导开发者如何使用`TelephonyManager` API来获取和...
在Android系统中,`TelephonyManager`是Android SDK提供的一个关键类,用于获取与电话通信相关的各种信息。这个类提供了许多方法,允许开发者访问手机的SIM卡状态、网络连接状态以及用户信息。在实际应用开发中,`...
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); ``` 然后,我们需要创建一个`PhoneStateListener`的子类,这个监听器会接收并处理电话状态的变化。在子类中重写`...
Android中的`TelephonyManager`类是系统服务的一个关键组件,它提供了访问手机通信相关状态和信息的接口。开发者可以使用这个类来获取关于手机硬件、网络状态以及SIM卡等信息。在Android应用程序中,`...
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String operatorName = telephonyManager.getNetworkOperatorName(); ``` `getNetworkOperatorName()`方法...
Android(安卓)应用开发技术 TelephonyManager闹铃管理器的使用案例源代码.rar Android(安卓)应用开发技术 TelephonyManager闹铃管理器的使用案例源代码.rar Android(安卓)应用开发技术 TelephonyManager闹铃...
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); ``` 2. **获取信号强度**: 对于GSM网络,可以使用`getVoiceNetworkType()`来判断网络类型,然后调用`...
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); ``` 接下来,我们关注如何获取通话状态。`TelephonyManager`提供了几个关键的方法来获取当前的通话状态: ...
1.在telephonymanager/src/main/AndroidManifest.xml中添加如下代码; 2.运行程序后,在虚拟机上打开 设置–>应用和通知–>搜索我们正在运行的应用程序–>权限–>将存储空间和麦克风权限设置为开启;(具体操作如...