2

我有一个双 SIM 卡手机,我的应用程序在上面显示 SIM 卡和运营商的详细信息。但是(显然)它只检测并显示 SIM1 而不是 SIM2 的详细信息。有没有办法可以访问 SIM2 的详细信息?

我知道 Android 默认情况下不支持双 SIM 卡,并且移动制造商对其进行了调整,使 Android 使用选定的SIM(SIM1 或 SIM2,无论用户选择哪个)作为主要(用于拨打电话),而另一个 SIM 是待机(接到电话时启动)。必须有一种方法来检测这个主 SIM 卡。

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

任何链接/工作示例/建议,任何形式的帮助都将受到高度赞赏。

谢谢

4

2 回答 2

2

要在控制台中查看 SIM1 类型的状态: adb shell dumpsys telephony.registry

要在控制台中查看 SIM2 的状态: adb shell dumpsys telephony.registry2

mCallState 在呼入/呼出时更改。它可以让您知道用于通话的 SIM 卡

要查看一些附加信息: adb shell getprop|grep gsm

当您从 Java 应用程序调用 dumpsys 时,您需要清单中的 android.permission.DUMP。但它不适用于某些新设备。

在某些手机上可以使用此代码来了解默认 sim 卡

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();
}
于 2014-10-28T15:17:56.173 回答
1

第 1 步:列出每个拥有 1 个以上双 SIM 卡设备的 Android 设备制造商。

第 2 步:联系这些制造商并向他们提问。

正如你所写:

我知道 Android 默认不支持双 SIM 卡,并且移动制造商对其进行了调整

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

于 2014-01-05T15:01:05.047 回答