双卡时候获取指定的imsi码

当手机里面插入两张sim卡的时候获取两张imsi码
智能机时代,国内Android手机基本找不到单卡的手机了,android系统api给我们预留了一些默认的方法来获取默认sim卡的方法比如:


public static String getIMSI(Context context) {
    TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    String imsi = mTelephonyMgr.getSubscriberId();

    return imsi;
}

当我们要同时获取指定的sim的imsi码的时候,就要花费点时间研究一下了:

我这给出一种通过反射获取imsi码方案:
/*
*
*获取指定sim卡的IMSI序列号
*/
public static String getSimIMSI(TelephonyManager telephonyManager, int simid) {

    int[] subId = null;//SubscriptionManager.getSubId(simid);
    Class<?> threadClazz = SubscriptionManager.class;
    try {
        Method method = threadClazz.getDeclaredMethod("getSubId", int.class);
        method.setAccessible(true);
        subId = (int[]) method.invoke(null, simid);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

    Log.d(TAG, "getSimIMSI, simId = " + simid + " subId  = " + ((subId != null) ? subId[0] : "invalid!"));
    int sub = -1;
    if (Build.VERSION.SDK_INT >= 24) {
        sub = (subId != null) ? subId[0] : SubscriptionManager.getDefaultSubscriptionId();
    } else {
        if (threadClazz != null) {
            try {
                Method method = threadClazz.getDeclaredMethod("getDefaultSubId");
                method.setAccessible(true);
                sub = (subId != null) ? subId[0] : (Integer) method.invoke(null, null);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    String IMSI = null;
    if (sub != -1) {
        Class clazz = telephonyManager.getClass();
        try {
            Method method = clazz.getDeclaredMethod("getSubscriberId",int.class);
            method.setAccessible(true);
            IMSI = (String)method.invoke(telephonyManager,sub);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    Log.d(TAG, "IMSI = " + IMSI);

    if (!TextUtils.isEmpty(IMSI)) {
        return IMSI;
    }

    return null;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值