android - 在双卡手机中检测当前/主 SIM

标签 android dual-sim

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

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

我对同时获取两张 SIM 卡的详细信息不感兴趣。仅需要用户选择的主要用于调用电话的 SIM 卡的详细信息。

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

谢谢

最佳答案

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

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

mCallState 在来电/去电时发生变化。它可以让您知道通话使用的是哪张 SIM 卡

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

当您从 Java 应用程序调用 dumpsys 时,您需要 list 中的 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();
}

关于android - 在双卡手机中检测当前/主 SIM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20934274/

相关文章:

android - 找不到类 'org.codehaus.jackson.map.ObjectMapper'?

android - 更改 View 大小以匹配内容

android - 无法使用 Charles Web 代理和 android 连接到 SSL,但仅用于测试

android - 有没有办法在双卡手机的两个插槽中获取运营商名称?

android - 如何找出哪个 SIM 卡正在拨出电话(双 SIM 卡)

android - 使用双 SIM 卡功能时如何获取 PhoneStateListener

Android AOSP 5.1 禁用/删除 wifi 代理

android - 我应该在已安装的应用程序中与我的免安装应用程序一起实现应用程序链接吗?应用链接的正确实现方式是什么?

android - 如何知道每次通话/短信的 SimSlot 号码?

Android - 如何通过双卡手机中的特定 SIM 卡调用电话?