为了账号安全,请及时绑定邮箱和手机立即绑定

Android:检查手机是否是双SIM

Android:检查手机是否是双SIM

慕的地6264312 2019-06-15 17:38:54
Android:检查手机是否是双SIM在论坛上进行了大量的研究之后,我现在知道在双SIM手机中无法找到两个SIM卡的IMSI或SIM序列号(除了与制造商联系)。现在我改变了的问题是,我们能发现手机有两个模拟人生吗?我相信有情报就能发现。我能想到的几种方法是:拨打USSD代码并跟踪IMEI号码的日志(我在印度尝试使用*139#)。)这将为我拨USSD代码的SIM提供IMEI号码。(据推测,这款手机遵循Android的规定,有两个IMEI号码。)存储用于SIM的SIM序列号和/或IMSI。在检测到任何其他IMSI/序列号之后,即使电话没有重新启动(即SIM被切换),也可以通过跟踪某些日志或通过广播事件处理。通过拨打*06#,您将看到两个IMEI号码。顺便说一句,得到这两个数字。(类似于屏幕捕获和文本图像解析。)如果有人能想到其他的方法,他们是最受欢迎的。我真的很感激在这方面提供任何帮助。此外,如果任何人有任何关于制造商API或链接的任何信息与他们联系,请与社区的人分享。
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

我有一个带有Android4.4.4的三星Duos设备,Seetha在接受的答案(即调用getDeviceIdDs)中建议的方法不适合我,因为这个方法不存在。通过调用方法“getDefault(IntslotID)”,我能够恢复所需的所有信息,如下所示:

public static void samsungTwoSims(Context context) {
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

    try{

        Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

        Class<?>[] parameter = new Class[1];
        parameter[0] = int.class;
        Method getFirstMethod = telephonyClass.getMethod("getDefault", parameter);

        Log.d(TAG, getFirstMethod.toString());

        Object[] obParameter = new Object[1];
        obParameter[0] = 0;
        TelephonyManager first = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

        Log.d(TAG, "Device Id: " + first.getDeviceId() + ", device status: " + first.getSimState() + ", operator: " 
        + first.getNetworkOperator() + "/" + first.getNetworkOperatorName());

        obParameter[0] = 1;
        TelephonyManager second = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

        Log.d(TAG, "Device Id: " + second.getDeviceId() + ", device status: " + second.getSimState()+ ", operator: " 
        + second.getNetworkOperator() + "/" + second.getNetworkOperatorName());
    } catch (Exception e) {
        e.printStackTrace();
    }   }

此外,我还重写了反复测试方法以恢复此信息的代码,以便它使用一个方法名称数组,而不是一系列try/catch。例如,要确定是否有两个活动的Sims,我们可以这样做:

private static String[] simStatusMethodNames = {"getSimStateGemini", "getSimState"};public static boolean hasTwoActiveSims(Context context) {
    boolean first = false, second = false;

    for (String methodName: simStatusMethodNames) {
        // try with sim 0 first
        try {
            first = getSIMStateBySlot(context, methodName, 0);
            // no exception thrown, means method exists
            second = getSIMStateBySlot(context, methodName, 1);
           return first && second;
        } catch (GeminiMethodNotFoundException e) {
            // method does not exist, nothing to do but test the next
        }
    }
    return false;}

这样,如果为某个设备建议了一个新的方法名,您可以简单地将它添加到数组中,并且它应该可以工作。


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 475 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信