当前位置: 首页 > 知识库问答 >
问题:

二级SIM卡的MNC和MCC

景理
2023-03-14

我知道使用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。

共有3个答案

龚同
2023-03-14
        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}]
马和硕
2023-03-14

SubscriptionManager subManager=(SubscriptionManager)getSystemService(Context.TELEPHONY\u SUBSCRIPTION\u 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);
    }
连文栋
2023-03-14

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

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

从API22开始,我认为您可以使用订阅管理器

    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软件开发工具包是不可能实现的。

 类似资料:
  • 查询SIM卡基本信息 接口描述 通过iccid或者phoneNumber查询号码的基本信息 URL /sim/{simId}/info 参数名称 是否必选 类型 描述 simId 是 string simId是sim卡的唯一标识,可以是iccid或者phoneNumber HTTP Method GET 请求参数 无 返回参数 参数名称 是否必选 类型 描述 merchantId

  • 我正在做一个项目,在这个项目中,我必须使用移动塔跟踪位置。当sim2处于紧急状态时,它在电话管理器中发出空指针异常。我必须为这两个模拟人生获取LAC、CID、MCC和MNC。我可以使用SubscriptionManager获得MCC、MNC。但我如何才能为这两张sim卡获得LAC和MCC?

  • 我正在更新一些代码,以使用5.1中添加到Android中的多SIM卡支持。我们在应用程序中经常检查SIM卡运营商(或MCC-MNC组合),因此我正在编写的代码涉及到从依赖TelephonyManager的迁移。getSimOperator()从SubscriptionManager获取SubscriptionInfo,每个SubscriptionManager都允许访问SIM卡的MCC和MNC。

  • sim

    sim 是一个简单的 C++ 网络服务器框架。使用这个框架,可以帮助你快速上手编写自定义的 C++ 服务器应用,避免繁琐的网络 IO 和连接管理等细节。 Sim 的报文协议设计得非常巧妙, 使得你可以用 nc/telnet 等工具配置进行调试, 快速开发。例如, 你可以用 nc 连接到 Sim 框架编写的服务器, 然后输入: ping hello world! 发给服务器请求。 demo: #in

  • 所以我刚刚开始学习python,从一些冗长的youtube教程开始。一个教程希望我创建一个启动和停止汽车的sim/游戏。我的代码与解决方案非常相似。我不确定有什么问题。具体的问题是,当汽车已经启动或停止时,程序无法返回打印功能——它只是重申启动/停止打印,就好像指示汽车是否开启或关闭的布尔代码目前不存在一样。

  • PLMN标识符(3字节),由MCC(移动国家代码)和MNC(移动网络代码)组成。 我被告知(尽管我持怀疑态度),这应该导致: 但是我一辈子都想不出如何从PLMN中得到结果,那么我该如何解析呢?