【问题标题】:SubscriptionInfo.getMnc() returns the same value for both the SIMs with different carriersSubscriptionInfo.getMnc() 为不同运营商的两张 SIM 卡返回相同的值
【发布时间】:2015-10-15 04:58:08
【问题描述】:

我试图在具有双 SIM 卡(均处于活动状态)的 Android 5.1 设备中获取 MCC 和 MNC 号码(基本上我想要 IMSI 号码,但这些也足够了)。由于 5.1 支持双卡,所以我像这样使用订阅管理器:

SubscriptionManager manager = SubscriptionManager.from(this);
List<SubscriptionInfo> sil = manager.getActiveSubscriptionInfoList();
    if (sil != null) {
        for (SubscriptionInfo subInfo : sil) {
            Log.v("TestMain", "SubInfo:" + subInfo);
        }
    } else {
        Log.v("TestMain", "SubInfo: list is null");
    }

得到这个输出:

07-24 18:28:32.162    3844-3844/? V/TestMain﹕ SubInfo:{id=1, mcc 405 mnc 803, iccId=89918030914128062059 simSlotIndex=0 displayName=Aircel Karnataka carrierName=Aircel — Aircel Karnataka nameSource=0}
07-24 18:28:32.162    3844-3844/? V/TestMain﹕ SubInfo:{id=2,  mcc 405 mnc 803, iccId=8991860044481968955 simSlotIndex=1 displayName=CARD 2 carrierName=Vodafone Karnataka nameSource=0}

MCC(将与同一个国家相同) 请注意,尽管运营商不同,但跨国公司是相同的。

当我关闭电话时,我在我的 logcat 中看到了这行:

07-24 18:31:02.295      616-616/? V/KeyguardUpdateMonitor﹕ SubInfo:{id=1,  mcc 405 mnc 803, iccId=89918030914128062059 simSlotIndex=0 displayName=CARD 1 carrierName=Emergency calls only — Aircel Karnataka nameSource=0}
07-24 18:31:02.295      616-616/? V/KeyguardUpdateMonitor﹕ SubInfo:{id=2,  mcc 404 mnc 86, iccId=8991860044481968955 simSlotIndex=1 displayName=CARD 2 carrierName=Emergency calls only — Vodafone Karnataka nameSource=0}

如您所见,keyguard 应用程序为两个 sim 设置了 MNC。

于是我研究了keyguard应用程序的代码,发现代码和我使用的一样 Android 源代码取自here

protected void handleSimSubscriptionInfoChanged() {
        if (DEBUG_SIM_STATES) {
            Log.v(TAG, "onSubscriptionInfoChanged()");
            List<SubscriptionInfo> sil = mSubscriptionManager.getActiveSubscriptionInfoList();
            if (sil != null) {
                for (SubscriptionInfo subInfo : sil) {
                    Log.v(TAG, "SubInfo:" + subInfo);
                }
            } else {
                Log.v(TAG, "onSubscriptionInfoChanged: list is null");
            }
        }

我进行了更多探索,发现即使是键盘保护应用程序也只有在手机关机时才能正确获取 MCC,有时甚至为两个 SIM 卡获取相同的 MNC。但是运营商名称总是不同的。

这是 Android 5.1 中的错误还是我做错了什么?

【问题讨论】:

  • 我想这是android的一个bug,我更新手机后修复了。
  • 在运行 Android 5.1 的摩托罗拉 Moto E 上存在同样的问题
  • 我在 Android 6 上遇到了同样的问题。

标签: android android-source telephonymanager android-5.1.1-lollipop dual-sim


【解决方案1】:

这是android 5.1的一个bug,我更新手机后修复了

【讨论】:

    【解决方案2】:

    我在三星 J5 的 Android 5.1 中遇到了同样的问题,但它在 Moto X Play 的 Android 6.0 中运行。由于 SubscriptionManager 是在 Android 5.1 中引入的,我猜这是 Android 5.1 中的一个错误,在 Android M 中已得到纠正。

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 2015-04-08
      • 2021-01-10
      相关资源
      最近更新 更多