TelephonyManager
<?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; } } }
相关推荐
huha 2020-10-16
xfcyhades 2020-11-20
sgafdsg 2020-11-04
Michael 2020-11-03
fengyeezju 2020-10-14
ziyexiaoxiao 2020-10-14
业余架构师 2020-10-09
OuNuo0 2020-09-29
moses 2020-09-22
Angelia 2020-09-11
qinxu 2020-09-10
刘炳昭 2020-09-10
Nostalgiachild 2020-09-07
Nostalgiachild 2020-08-17
leavesC 2020-08-14
一青年 2020-08-13
AndroidAiStudy 2020-08-07
ydc0 2020-07-30
绿豆饼 2020-07-28