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

我可以找到MCC MNC的网络提供商为多模拟卡

袁鹤轩
2023-03-14

例如,我有一个双卡手机,里面有Airtel和沃达丰sim卡。我想知道我们能否得到两家网络供应商的MCC和MNC。

这我知道

使用getPhoneCount()我们可以知道一台设备有多少SIM卡
使用getNetworkOperator()可以获得活动网络运营商的MCC MNC。

共有1个答案

徐君植
2023-03-14

这是不容易之前,但后Lollipop版本,你可以做到这一点。这是我的代码:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                SubscriptionManager subManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
                if (subManager.getActiveSubscriptionInfoCount() >= 1) {
                    List<SubscriptionInfo> subscriptionInfoList;
                    subscriptionInfoList=subManager.getActiveSubscriptionInfoList();
                    String carrierName = subscriptionInfoList.get(0).getCarrierName().toString();
                    int mccSlot1 = subscriptionInfoList.get(0).getMcc();
                    int mncSlot1 = subscriptionInfoList.get(0).getMnc();
                    Toast.makeText(MainActivity.this, "Sim slot 1 " + mccSlot1 + " " + mncSlot1 + "Name"+carrierName, Toast.LENGTH_SHORT).show();
                    String carrierName2 = subscriptionInfoList.get(1).getCarrierName().toString();
                    int mccSlot2 = subscriptionInfoList.get(1).getMcc();
                    int mncSlot2 = subscriptionInfoList.get(1).getMnc();
                    Toast.makeText(MainActivity.this, "Sim slot 2 " + mccSlot2 + " " + mncSlot2+"Name"+carrierName2, 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(MainActivity.this, "Lower than API 22 " + mccCode + " " + mncCode, Toast.LENGTH_SHORT).show();
                return;
            }

在授予权限后,只需在您的on create方法中添加此代码。

   <uses-permission android:name="android.permission.READ_PHONE_STATE" />

注意:如果您在最新的android版本(如marshmellow、nougat)上进行测试

 类似资料:
  • 我正在尝试开发一个android应用程序,该应用程序使用GPS或网络提供商获取设备纬度和经度,以该过程可用的为准。当设备的GPS打开时,代码工作得非常好,但不幸的是,当设备的GPS关闭时,它永远不会工作。 例如,我想根据可用的提供商获取设备的纬度和经度;如果设备的GPS打开,它应该使用GPS提供商获取设备的纬度和经度,如果GPS关闭,它应该使用网络提供商获取设备的纬度和经度。在我的情况下,网络提供

  • 我正在尝试从最好的提供商那里获取位置。我启用了GPS。此外,当我打印纬度和经度时,我从网络提供商那里获取它。 我的问题是: 如果启用了GPS,那么我想通过GPS搜索30秒的位置。在那之后,如果我的精度低于200米,那么我就使用它。如果精度超过200米,我会再次搜索,然后从网络提供商那里开始。 之后,我比较两者的准确性,并获取更准确的提供商的数据。 这是我的代码: LocationUtil。JAVA

  • 其次,检查GPS是否启用,以及GPS提供商是否工作正常,我可以从GPS提供商那里获取纬度和经度。 第三,如果GPS关闭,我试图从网络提供商那里获得位置。但是,在这种情况下有时我不能成功地获取位置。 所以,我必须让用户打开GPS,并且在打开GPS后必须得到位置。

  • 对于Jcache配置,我们需要有通用的XML配置参数(如timetolive)<我们正在使用EhCache进行开发,并可能在其他环境中使用其他符合Jsr107的缓存提供程序,如Infinispan。 是否可以让两个缓存提供程序都使用一个配置文件,并且如果需要,我们只需要为不同的环境更改一些参数? 可以在属性文件中定义这些属性并使用它们根据配置文件初始化缓存管理器吗? 我浏览了jsr107留档,但没

  • 我们正在构建一项最初以消息下载为主的服务。我们试图找到所有技巧来增加我们的消息下载吞吐量。 遇到这篇文章 建议的标准:有效的工业级解决方法是使用轮循机制队列中的帐户池来使用 EWS 模拟执行 EWS 调用。通过这样做,服务器将看到同一帐户具有较小的负载。这是通常推荐的方法,需要认真考虑 - 特别是当上面的其他建议不起作用时。它是最具可扩展性的,可以处理从小到大的负载。小公司一直到大公司都使用这种方

  • 我为一家SaaS提供商工作,该提供商希望以我们的应用程序作为服务提供商,向企业客户提供SSO应用程序。 我理解需要发生的事情背后的概念,并且SAML是我们希望做的事情的适当解决方案。看看更大的SaaS提供商(slack、dropbox、new relic等)我可以看到,它们通常似乎与许多身份提供商集成,如OneLogin、Bitium、Okta、Ping Identity等。。。以及通用SAML支