双卡的时候,用TelephonyManager的getSimOperatorName拿到的是默认打电话的运营商名称,这api有点坑。
注意:
getNetworkOperator 不是获取上网卡运营商
getSimOperatorName 不是获取上网卡运营商的名称
官方文档只支持5.1及其之后的系统提供双卡API。对于之前的系统版本,就无能为力了。
1、5.0及其之前 android.os.Build.VERSION.SDK_INT<=21
这部分放弃,将其归入没有获取到系统权限的一样,当做读不出运营商看待。
2、5.1及其之后 android.os.Build.VERSION.SDK_INT>=22
精准获取上网卡运营商的调用如下:
public static int getCurrentCarrierType(Context context) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
return -1;
}
if (context == null) {
return -1;
}
TelephonyManager telMag = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telMag == null) {
return -1;
}
return parseOperatorCode(telMag.getSimOperator());
}
public static int parseOperatorCode(String operatorCode) {
if (operatorCode == null || "".equals(operatorCode)) return -1;
switch (operatorCode) {
case "46000":
case "46002":
case "46007":
case "46008":
return MOBILE;
case "46001":
case "46006":
case "46009":
return UNICOM;
case "46003":
case "46005":
case "46011":
return TELECOM;
}
return -1;
}
网友评论