Android查询SIM卡所有信息

查询方法:

public static JSONArray getAllSimInfo(TelephonyManager tel) throws Exception {
    Class<?> clazz = tel.getClass();

    //获取可以进行反射的字段
    List<EMethod> list = new ArrayList<>();
    Map<String, Integer> 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<array.length(); j++) {
            if(imsi.equals(array.optJSONObject(j).optString("SubscriberId"))) {
                repeact = true;
                break;
            }
        }
        if(repeact)
            continue;

        array.put(json);
    }
    return array;
}

 

以下是查询出所有的信息:

{
    "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  

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值