2014-01-05 42 views
1

我有一个双卡手机,我的应用程序显示SIM卡和操作员的详细信息。但是(显然)它检测并显示只有SIM1而不是SIM2的详细信息。有没有可以访问SIM2细节的方法?检测双卡手机中的当前/主SIM卡

我知道Android默认情况下不与支持双SIM移动制造商的调整它以这样一种方式,Android使用的选择 SIM(SIM1或SIM2,取用户选择)作为主要(用于进行呼叫),另一个SIM是待机的(当收到呼叫时踢)。必须有一种方法来检测这个主SIM卡。

我对同时获取两个SIM细节不感兴趣。只需要将用户选择的SIM卡的详细信息作为拨打电话的主要参数。

任何链接/工作示例/建议,任何形式的帮助将不胜感激。

感谢

回答

1

第1步:制作,其中的每Android设备制造商1+双SIM卡设备的列表。

步骤#2:联系这些制造商并询问他们的问题。

正如你写道:

我知道Android默认情况下不和的手机制造商的调整,支持双SIM它

没有要求任何给定的设备制造商必须调整它与其他任何制造商一样,并且不要求任何给定的设备制造商必须以应用程序开发人员可见的方式对其进行调整。因此,如果应用程序支持实际可用,获取所需信息的唯一方法是联系制造商。

2

要查看SIM1类型的状态在控制台: ADB壳dumpsys telephony.registry

要查看在控制台SIM2类型的状态: ADB壳dumpsys telephony.registry2

mCallState上传入/传出改变呼叫。它允许让你知道哪些使用SIM卡呼叫

要查看一些额外的信息: 亚行外壳getprop | grep的GSM

当您从Java的应用程序调用dumpsys,你需要在android.permission.DUMP表现。但它不适用于某些新设备。

在某些手机可以工作,这个代码知道default sim card

Object tm = getSystemService(Context.TELEPHONY_SERVICE); 
Method method_getDefaultSim;  
int defaultSim = -1; 
try { 
    method_getDefaultSim = tm.getClass().getDeclaredMethod("getDefaultSim"); 
    method_getDefaultSim.setAccessible(true); 
    defaultSim = (Integer) method_getDefaultSim.invoke(tm); 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Method method_getSmsDefaultSim; 
int smsDefaultSim = -1; 
try { 
    method_getSmsDefaultSim = tm.getClass().getDeclaredMethod("getSmsDefaultSim"); 
    smsDefaultSim = (Integer) method_getSmsDefaultSim.invoke(tm); 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

当使用这种SIM卡总是得到“0”和手机短信“1”。即使选择了一个SIM卡或'先询问' –