手机最主要的功能就是打电话,可以通过TelephonyManager提供的方法来获取SIM卡的状态和相关资料。
通过getSystemService(Context.TELEPHONY_SERVICE)取得TelephonyManager对象。
代码:
/** * 获取SIM卡信息 */ private void loadTelephonyData() { //取得SIM卡状态 items.add("SIM卡状态"); switch (tm.getSimState()) { case TelephonyManager.SIM_STATE_READY: values.add("良好"); break; case TelephonyManager.SIM_STATE_ABSENT: values.add("无SIM卡"); break; default: values.add("SIM卡被锁定或未知的状态"); break; } //获取SIM卡卡号 items.add("SIM卡卡号"); if(tm.getSimSerialNumber()==null){ values.add("无法获取号码"); }else{ values.add(tm.getSimSerialNumber()); } //取得SIM卡供货商代码 items.add("SIM卡供货商代码"); if("".equals(tm.getSimOperator())){ values.add("无法获取供应商代码"); }else{ values.add(tm.getSimOperator()); } //获取SIM卡供应商名称 items.add("SIM卡供应商名称"); if("".equals(tm.getSimOperatorName())){ values.add("无法获取供应商名称"); }else{ values.add(tm.getSimOperatorName()); } //获取SIM卡区域 items.add("SIM卡区域"); if("".equals(tm.getSimCountryIso())){ values.add("无法获取SIM卡区域"); }else{ values.add(tm.getSimCountryIso()); } }
AndroidManifest.xml本身必须要在Activity里设置读取电话状态的权限(Android.permission.READ_PHONE_STATE):
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
上述程序以TelephonyManager.getSimState()方法来取得SIM卡的状态,可能出现的返回状态如下表:
常数名称 | 说明 | 常数值 |
SIM_STATE_ABSENT | 手机内无SIM卡 | 1 |
SIM_STATE_NETWORK_LOCKED | 需要Network PIN解锁 | 4 |
SIM_STATE_PIN_REQUIRED | 需要SIM卡的PIN解锁 | 2 |
SIM_STATE_PUK_REQUIRED | 需要SIM卡的PUK解锁 | 3 |
SIM_STATE_READY | SIM卡已准备好 | 5 |
SIM_STATE_UNKNOWN | 状态未知 | 0 |