猿问

Android:检查手机是否是双SIM

Android:检查手机是否是双SIM

在论坛上进行了大量的研究之后,我现在知道在双SIM手机中无法找到两个SIM卡的IMSI或SIM序列号(除了与制造商联系)。现在我改变了的问题是,我们能发现手机有两个模拟人生吗?我相信有情报就能发现。我能想到的几种方法是:

  1. 拨打USSD代码并跟踪IMEI号码的日志(我在印度尝试使用*139#)。)这将为我拨USSD代码的SIM提供IMEI号码。(据推测,这款手机遵循Android的规定,有两个IMEI号码。)

  2. 存储用于SIM的SIM序列号和/或IMSI。在检测到任何其他IMSI/序列号之后,即使电话没有重新启动(即SIM被切换),也可以通过跟踪某些日志或通过广播事件处理。

  3. 通过拨打*06#,您将看到两个IMEI号码。顺便说一句,得到这两个数字。(类似于屏幕捕获和文本图像解析。)

如果有人能想到其他的方法,他们是最受欢迎的。我真的很感激在这方面提供任何帮助。此外,如果任何人有任何关于制造商API或链接的任何信息与他们联系,请与社区的人分享。


慕的地6264312
浏览 476回答 3
3回答

慕的地8271018

我有一个带有Android4.4.4的三星Duos设备,Seetha在接受的答案(即调用getDeviceIdDs)中建议的方法不适合我,因为这个方法不存在。通过调用方法“getDefault(IntslotID)”,我能够恢复所需的所有信息,如下所示:public&nbsp;static&nbsp;void&nbsp;samsungTwoSims(Context&nbsp;context)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;TelephonyManager&nbsp;telephony&nbsp;=&nbsp;(TelephonyManager)&nbsp;context.getSystemService(Context.TELEPHONY_SERVICE); &nbsp;&nbsp;&nbsp;&nbsp;try{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class<?>&nbsp;telephonyClass&nbsp;=&nbsp;Class.forName(telephony.getClass().getName()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class<?>[]&nbsp;parameter&nbsp;=&nbsp;new&nbsp;Class[1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameter[0]&nbsp;=&nbsp;int.class; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;getFirstMethod&nbsp;=&nbsp;telephonyClass.getMethod("getDefault",&nbsp;parameter); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(TAG,&nbsp;getFirstMethod.toString()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;obParameter&nbsp;=&nbsp;new&nbsp;Object[1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obParameter[0]&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TelephonyManager&nbsp;first&nbsp;=&nbsp;(TelephonyManager)&nbsp;getFirstMethod.invoke(null,&nbsp;obParameter); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(TAG,&nbsp;"Device&nbsp;Id:&nbsp;"&nbsp;+&nbsp;first.getDeviceId()&nbsp;+&nbsp;",&nbsp;device&nbsp;status:&nbsp;"&nbsp;+&nbsp;first.getSimState()&nbsp;+&nbsp;",&nbsp;operator:&nbsp;"&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;first.getNetworkOperator()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;first.getNetworkOperatorName()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obParameter[0]&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TelephonyManager&nbsp;second&nbsp;=&nbsp;(TelephonyManager)&nbsp;getFirstMethod.invoke(null,&nbsp;obParameter); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(TAG,&nbsp;"Device&nbsp;Id:&nbsp;"&nbsp;+&nbsp;second.getDeviceId()&nbsp;+&nbsp;",&nbsp;device&nbsp;status:&nbsp;"&nbsp;+&nbsp;second.getSimState()+&nbsp;",&nbsp;operator:&nbsp;"&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;second.getNetworkOperator()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;second.getNetworkOperatorName()); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;}此外,我还重写了反复测试方法以恢复此信息的代码,以便它使用一个方法名称数组,而不是一系列try/catch。例如,要确定是否有两个活动的Sims,我们可以这样做:private&nbsp;static&nbsp;String[]&nbsp;simStatusMethodNames&nbsp;=&nbsp;{"getSimStateGemini",&nbsp;"getSimState"};public&nbsp;static&nbsp;boolean&nbsp;hasTwoActiveSims(Context&nbsp;context)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;first&nbsp;=&nbsp;false,&nbsp;second&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(String&nbsp;methodName:&nbsp;simStatusMethodNames)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;try&nbsp;with&nbsp;sim&nbsp;0&nbsp;first &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;=&nbsp;getSIMStateBySlot(context,&nbsp;methodName,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;no&nbsp;exception&nbsp;thrown,&nbsp;means&nbsp;method&nbsp;exists &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second&nbsp;=&nbsp;getSIMStateBySlot(context,&nbsp;methodName,&nbsp;1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;first&nbsp;&&&nbsp;second; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(GeminiMethodNotFoundException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;method&nbsp;does&nbsp;not&nbsp;exist,&nbsp;nothing&nbsp;to&nbsp;do&nbsp;but&nbsp;test&nbsp;the&nbsp;next &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;}这样,如果为某个设备建议了一个新的方法名,您可以简单地将它添加到数组中,并且它应该可以工作。
随时随地看视频慕课网APP

相关分类

Android
我要回答