幸运的是,在搜索获取网络运营商的方式时,我发现了几种原生解决方案.
对于API> = 17:
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); // Get information about all radio modules on device board // and check what you need by calling #getCellIdentity. final ListallCellInfo = manager.getAllCellInfo(); for (CellInfo cellInfo : allCellInfo) { if (cellInfo instanceof CellInfoGsm) { CellIdentityGsm cellIdentity = ((CellInfoGsm) cellInfo).getCellIdentity(); //TODO Use cellIdentity to check MCC/MNC code, for instance. } else if (cellInfo instanceof CellInfoWcdma) { CellIdentityWcdma cellIdentity = ((CellInfoWcdma) cellInfo).getCellIdentity(); } else if (cellInfo instanceof CellInfoLte) { CellIdentityLte cellIdentity = ((CellInfoLte) cellInfo).getCellIdentity(); } else if (cellInfo instanceof CellInfoCdma) { CellIdentityCdma cellIdentity = ((CellInfoCdma) cellInfo).getCellIdentity(); } }
在AndroidManifest中添加权限:
要获得网络运营商,您可以检查mcc和mnc代码:
https://en.wikipedia.org/wiki/Mobile_country_code(一般信息).
https://clients.txtnation.com/hc/en-us/articles/218719768-MCCMNC-mobile-country-code-and-mobile-network-code-list-(相当完整和最新的运营商列表).
对于API> = 22:
final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); final ListactiveSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList(); for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfoList) { final CharSequence carrierName = subscriptionInfo.getCarrierName(); final CharSequence displayName = subscriptionInfo.getDisplayName(); final int mcc = subscriptionInfo.getMcc(); final int mnc = subscriptionInfo.getMnc(); final String subscriptionInfoNumber = subscriptionInfo.getNumber(); }
对于API> = 23.要检查手机是双/三/多SIM卡:
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); if (manager.getPhoneCount() == 2) { // Dual sim }