【问题标题】:MNC and MCC of a secondary SIM辅助 SIM 的 MNC 和 MCC
【发布时间】:2016-02-17 06:08:03
【问题描述】:

我知道使用TelephonyManager我们可以获得我们网络提供商的MNC和MCC,

TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = tel.getNetworkOperator();

if (networkOperator != null) {
    int mcc = Integer.parseInt(networkOperator.substring(0, 3));
    int mnc = Integer.parseInt(networkOperator.substring(3));
}

但我只能获取主 sim 的 MNC 和 MCC 数据。我想知道有没有办法在 android 中获取设备的辅助 sim 的 mnc、mcc、lac 和 cellid。

【问题讨论】:

    标签: android telephonymanager


    【解决方案1】:

    在 API 22 之前,很难实现您想要的。

    我相信在 API 22 之前,Android 最初并不支持双 SIM 卡。因此,每个移动供应商都应该有自己的实现。也许,您应该获取他们的 API/SDK 并将它们包含到您的项目中。只有这样,您才能访问他们的 API。

    从 API22 开始,我认为你可以使用 SubscriptionManager

        int mccSlot1 = -1;
        int mccSlot2 = -1;
        int mncSlot1 = -1;
        int mncSlot2 = -1;
    
        SubscriptionManager subManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    
        if(subManager.getActiveSubscriptionInfoCount() >= 1) {
            mccSlot1 = subManager.getActiveSubscriptionInfo(0).getMcc();
            mncSlot1 = subManager.getActiveSubscriptionInfo(0).getMnc();
        }
    
        if(subManager.getActiveSubscriptionInfoCount() >= 2) {
            mccSlot2 = subManager.getActiveSubscriptionInfo(1).getMcc();
            mncSlot2 = subManager.getActiveSubscriptionInfo(1).getMnc();
        }
    

    问题 https://stackoverflow.com/a/32871156/4860513 提到了同样的 Android 限制。所以,我真的相信在 API22 之前用纯 Android SDK 是不可能实现的。

    【讨论】:

    • 有时 SubscriptionManager 为两个 SIM 提供相同的值。有时,即使只安装了一个 SIM,它也会给出错误的值。这使得它使用起来不可靠。我正在摩托罗拉 Moto E 设备上针对 Android 5.1 进行测试。
    • @BeshoyFayez 是的,当我将这个 api 检查到 ViVo v5 移动设备时,我也面临同样的问题,两个 sim 卡的值相同。如果您发现任何其他代码来获取 mcc/mnc 的值,请放在这里
    • 我有 android 6.0.1 面临同样的问题,这个 api 为两个不同的运营商提供相同的 mcc 和 mnc(一个是 Airtel,另一个是 Vodafone)sim
    • 此方法返回 null。我正在针对 android 8.0 Nokia3 进行测试
    • subId 并不总是 0 或 1。SubscriptionManager.getDefaultSubscriptionId() 在我的手机中返回 6。
    【解决方案2】:

    SubscriptionManager subManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                == PackageManager.PERMISSION_GRANTED) {
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                if (subManager.getActiveSubscriptionInfoCount() >= 1) {
                    List<SubscriptionInfo> subscriptionInfoList;
                    subscriptionInfoList=subManager.getActiveSubscriptionInfoList();
                    mccSlot1 = subscriptionInfoList.get(0).getMcc();
                    mncSlot1 = subscriptionInfoList.get(0).getMnc();
                    Toast.makeText(this, "Sim slot 1 " + mccSlot1 + " " + mncSlot1, Toast.LENGTH_SHORT).show();
                    mccSlot2 = subscriptionInfoList.get(1).getMcc();
                    mncSlot2 = subscriptionInfoList.get(1).getMnc();
                    Toast.makeText(this, "Sim slot 1 " + mccSlot2 + " " + mncSlot2, Toast.LENGTH_SHORT).show();
    
                }
            } else {
                TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                if (telephonyManager == null) {
                    return;
                }
                String mCCMncCode = telephonyManager.getNetworkOperator();
                String mccCode = null;
                String mncCode = null;
                if (TextUtils.isEmpty(mCCMncCode)) {
                    return;
                }
    
                final int MNC_CODE_LENGTH = 3;
                if (mCCMncCode.length() >= MNC_CODE_LENGTH) {
                    mccCode = mCCMncCode.substring(0, MNC_CODE_LENGTH);
                }
    
                if (mCCMncCode.length() > MNC_CODE_LENGTH) {
                    mncCode = mCCMncCode.substring(MNC_CODE_LENGTH);
                }
                Toast.makeText(this, "Lower than API 22 " + mccCode + " " + mncCode, Toast.LENGTH_SHORT).show();
                return;
            }
        }
        else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
        }
    

    【讨论】:

      【解决方案3】:
              SubscriptionManager subManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
              List<SubscriptionInfo> subscriptionInfoList=new ArrayList<>();
              subscriptionInfoList=subManager.getActiveSubscriptionInfoList();
              Log.d("LIST LIST",subscriptionInfoList.toString());
      

      日志是

      [{id=4, iccId=89918782910310260628 simSlotIndex=0 displayName=Jio 4G carrierName=Jio 4G nameSource=0 iconTint=-16746133 dataRoaming=0 iconBitmap=android.graphics.Bitmap@2758949 mcc 405 mnc 861 SimProvisioningStatus 0 status 1}, {id=1, iccId=8991000826229271344 simSlotIndex=1 displayName=airtel carrierName=airtel nameSource=2 iconTint=-16746133 dataRoaming=0 iconBitmap=android.graphics.Bitmap@355e24e mcc 404 mnc 45 SimProvisioningStatus 0 status 1}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多