Android查询SIM卡所有信息
查询方法:
public static JSONArray getAllSimInfo(TelephonyManager tel) throws Exception { Class<?> clazz = tel.getClass(); //获取可以进行反射的字段 List list = new ArrayList<>(); Map listIgnore = new HashMap<>(); Method[] methods = clazz.getDeclaredMethods(); for(Method method : methods) { String name = method.getName(); if(!name.startsWith("get")) continue; if(listIgnore.get(name) != null) continue; listIgnore.put(name, 0); Method m1 = null; Method m2 = null; Method m3 = null; try {m1 = clazz.getDeclaredMethod(name); } catch(Exception e) {} try {m2 = clazz.getDeclaredMethod(name, int.class); } catch(Exception e) {} try {m3 = clazz.getDeclaredMethod(name, long.class); } catch(Exception e) {} if(m1 != null && ((m2 == null && m3 != null) || (m2 != null && m3 == null))) { Class<?> c1 = m1.getReturnType(); Class<?> c2 = m2 == null ? null : m2.getReturnType(); Class<?> c3 = m3 == null ? null : m3.getReturnType(); if(m2 == null) { if(c1 == null || c1 != c3) continue; } else { if(c1 == null || c1 != c2) continue; } EMethod item = new EMethod(name, m2 == null ? 1 : 0, c1); list.add(item); } } listIgnore.clear(); JSONArray array = new JSONArray(); for(int i=0; i<10; i++) { JSONObject json = new JSONObject(); for(EMethod em : list) { Method method = null; Object param = null; if(em.type == 0) { method = clazz.getDeclaredMethod(em.name, int.class); param = i; } else { method = clazz.getDeclaredMethod(em.name, long.class); param = new Long(i); } if(!method.isAccessible()) method.setAccessible(true); String name = em.name.substring(3); Object value = null; try { value = method.invoke(tel, param); } catch(Exception e) { //前面已经对private设置了可访问,有些还是会报错,就不管这个了 continue; } json.put(name, value); } if(json.optInt("SimState") == TelephonyManager.SIM_STATE_UNKNOWN || json.optInt("SimState") == TelephonyManager.SIM_STATE_ABSENT) continue; String imsi = json.optString("SubscriberId"); if(imsi == null || imsi.length() == 0) continue; //根据imsi去重 boolean repeact = false; for(int j=0; j
以下是查询出所有的信息:
{
"NetworkTypeName":"UNKNOWN",
"PhoneId":0,
"PhoneType":1,
"PhoneTypeFromNetworkType":1,
"PhoneTypeFromProperty":1,
"SubId":0,
"CallState":0,
"CdmaEriIconIndex":-1,
"CdmaEriIconMode":-1,
"CdmaEriText":"GSM nw, no ERI",
"CurrentPhoneType":1,
"DataNetworkType":13,
"DeviceId":"865098038283330",
"DeviceSoftwareVersion":"00",
"EmergencyCallbackMode":false,
"GroupIdLevel1":"ff",
"Imei":"865098038283330",
"Line1AlphaTag":"@@@@@@@@@@@@@@",
"Line1Number":"+8613293849943",
"LteOnCdmaMode":1,
"Meid":"99001069328499",
"Msisdn":"+8613293849943",
"NetworkCountryIso":"cn",
"NetworkOperator":"46001",
"NetworkOperatorName":"中国联通",
"NetworkType":13,
"SimCountryIso":"cn",
"SimOperator":"46001",
"SimOperatorName":"中国联通",
"SimOperatorNumeric":"46001",
"SimSerialNumber":"83860112012832486267",
"SimState":5,
"SubscriberId":"460012889988497",
"VoiceMailAlphaTag":"语音信箱",
"VoiceMessageCount":0,
"VoiceNetworkType":13
}
其中 Msisdn 跟 Line1Number 这两个是手机号码 SubId是卡槽id 卡1为0 卡2为1
更多相关文章
- Android的SMS短消息格式和主要字段
- Android 查询字段
- android 联系人源码分析 新字段的添加流程
- Android中ps命令各字段的含义
- Android-->获取所有联系人以及所有的字段(联系人头像,邮箱,地址,
- android常用数据库字段描述