我正在尝试获取mcc
andmnc
之后的SIM LOADED
状态,以检查 SIM 卡是否在READ PHONE STATE
未经许可的情况下进行了更改,以禁用用户不想要的某些网络和某些国家/地区的应用程序请求。
由于getSimOperator()
可能会根据当前运营商而变化(例如,当用户是否在漫游时)我决定使用getNetworkOperator()
.
虽然这种方法可以返回null
,即使SIM
是LOADED
并且可能返回不同的结果,例如,只有 GSM 连接的 lycamobile 卡给了我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
。