ユーザーのSIMの電話番号、imei番号、およびオペレーターの詳細が必要なアプリに取り組んでいます。これまでのところ、この回答を参照して彼のIMEIの数字を達成しました。彼のデバイスはシングルSIMまたはデュアルSIMです。SIM の両方の番号と両方の接続のオペレーターの名前を取得するにはどうすればよいですか。
10564 次
4 に答える
3
幸いなことに、いくつかのネイティブ ソリューションがあります。これが誰かを助けることを願っています。
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 List<CellInfo> allCellInfo = 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 に権限を追加します。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
ネットワーク オペレータを取得するには、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 List<SubscriptionInfo> activeSubscriptionInfoList = 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
}
于 2016-11-05T15:07:14.300 に答える
1
ここで試してください:
private List<String> getNetworkOperator(final Context context) {
// Get System TELEPHONY service reference
List<String> carrierNames = new ArrayList<>();
try {
final String permission = Manifest.permission.READ_PHONE_STATE;
if ( (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) && (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED) ){
final List<SubscriptionInfo> subscriptionInfos = SubscriptionManager.from(context).getActiveSubscriptionInfoList();
for (int i = 0; i < subscriptionInfos.size(); i++) {
carrierNames.add(subscriptionInfos.get(i).getCarrierName().toString());
}
} else {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
// Get carrier name (Network Operator Name)
carrierNames.add(telephonyManager.getNetworkOperatorName());
}
} catch (Exception e) {
e.printStackTrace();
}
return carrierNames;
}
于 2016-10-26T10:11:43.020 に答える