Android 获取当前设备SIM运营商

        直接上代码

    //获取当前SIM卡运营商名称  
    public static String getSimOperatorName(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        //返回 中国联通或China Unicom,中国电信或China Telecom,中国移动或China Mobile 返回什么根据当前设备使用的数据卡而定
        return tm.getSimOperatorName();
    }

    //获取当前SIM卡的MCC(移动国家码,前3位数)和MNC(移动网络码,后两位数)  加起来共5位
    public static String getSimOperator(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        //比如我的联通卡返回46001,电信卡返回46011
        return tm.getSimOperator();
    }

想省事直接用getSimOperatorName()直接判断好了,不过这个方法有时候会出BUG。建议最好使用getSimOperator()判断

PS: 2022.7.25的文章写错成getNetworkOperatorName()和getNetworkOperator(),现已更正为getSimOperatorName()和getSimOperator()

额外吐槽:

最开始搜百度结果清一色全是下面这种方法:

 结果用起来发现除了要获取READ_PHONE_STATE权限,如果你的设备是Android10或以上则要获取READ_PRIVILEGED_PHONE_STATE

(具体参考https://developer.android.com/guide/webapps/managing-webview?hl=zh-cn),如果单纯只是用来获取运营商这未免有点小题大做,而且过度获取权限容易引起用户反感。

最重要的是!他这个方法判断的MNC压根不全!比如我上面电信卡46011就不在他的判断条件里。最关键几乎百度的方法全TM是这种复制粘版本,这不就是坑人吗?

※相对完整的参考如下:

Mobie:移动,Unicom:联通,Telecom:电信

补充:46000, 46002, 46004, 46007, 46008 -> Mobile 移动

46001, 46006, 46009 -> Unicom 联通

46003, 46005, 46011 -> Telecom 电信

46020 -> Tietong 铁通

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值