我试图在SIM LOADED状态之后获取mcc和mnc ,以便检查SIM卡是否在没有READ PHONE STATE权限的情况下进行更改,以便禁用某些网络的应用程序请求以及用户执行某些网络的应用程序请求不想。
由于getSimOperator()可能会根据当前运营商进行更改(例如,当用户正在漫游时),我决定使用getNetworkOperator() 。
虽然这种方法可以返回null ,即使SIM是LOADED ,可能会返回不同的结果,如莱卡移动通讯卡仅限GSM连接是给我mnc = 01 ,当我把SIM卡取出,并把它再次它给了我mnc = 04 。
有人知道为什么mnc为getNetworkOperator()提供不同的结果吗? 对于这种情况,哪种方法更好, getNetworkOperator()或getSimOperator() ?
另外,我不能使用getResources().getConfiguration().mcc因为它给出一个int数,可能会删除0之前,例如给出4而不是04 。
这是我检查SIM状态更改的代码:
@Override
public void onReceive(final Context context, Intent intent) {
if (intent != null) {
Bundle extras = intent.getExtras();
if (extras != null) {
String ss = extras.getString(EXTRAS_SIM_STATUS);
if (ss != null && (ss.equals("LOADED"))) {
TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && hasPermissions(READ_PHONE_STATE)) {
//here I get the imsi
}else{
L.d("NetworkOperator result %s", telephonyManager.getNetworkOperator());
//saving in shared preferences in order to check if the sim is allowed or not
//this is also called on application onCreate() so I can check the current SIM
}
}
}
}
}
PS:我使用的SIM卡只有GSM连接。 此外,我尝试使用另一张卡(具有4g功能),一切正常, mnc与沃达丰卡的01相同。