副 SIM 卡的 MNC 和 MCC
MNC and MCC of a secondary SIM
我知道使用 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
在API22之前,很难达到你想要的。
我相信在 API 22 之前,Android 最初不支持双卡双待。因此,每个移动供应商都应该有自己的实现。也许,您应该获取他们的 APIs/SDKs 并将它们包含到您的项目中。只有这样,您才能访问他们的 APIs.
从 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();
}
问题 提到相同的 Android 限制。所以,我真的相信在 API22 之前使用纯 Android SDK 是不可能实现的。
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}]
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);
}
我知道使用 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在API22之前,很难达到你想要的。
我相信在 API 22 之前,Android 最初不支持双卡双待。因此,每个移动供应商都应该有自己的实现。也许,您应该获取他们的 APIs/SDKs 并将它们包含到您的项目中。只有这样,您才能访问他们的 APIs.
从 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();
}
问题
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}]
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);
}