侧边栏壁纸
博主头像
Gstory's Blog 博主等级

每天进步一点点!

  • 累计撰写 108 篇文章
  • 累计创建 24 个标签
  • 累计收到 11 条评论

目 录CONTENT

文章目录

Android获取当前设备SIM运营商

gstory
2021-12-30 / 0 评论 / 1 点赞 / 446 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-08,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

最近业务上需要获取用户SIM运营商来做相关处理,可以通过以下方案直接获取

    //获取当前SIM卡运营商名称  
    //return 与SIM卡有关,如果无卡则返回空
    //中国联通或China Unicom
    //中国电信或China Telecom
    //中国移动或China Mobile
    public static String getSimOperatorName(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        return tm.getSimOperatorName();
    }
 
    //获取当前SIM卡的MCC(移动国家码,前3位数)和MNC(移动网络码,后两位数)  加起来共5位
    //MCC码:
    //中国香港:454(454, "Hong Kong", "HK", "香港")
    //中国澳门:455
    //中国大陆:460(460, "China", "CN", "中国")
    //中国台湾:466(466, "Taiwan", "TW", "台湾")
    //MNC码:
    //中国移动:00,02,04,07,08,20,99
    //中国联通:01,06,09
    //中国电信:03,05,11,12,13
    public static String getSimOperator(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        return tm.getSimOperator();
    }

如果通过getsubscriberId()获取IMSI(国际移动用户识别码)则需要READ_PHONE_STATE权限,如果Android10或以上则要获取READ_PRIVILEGED_PHONE_STATE权限,比较麻烦,如果仅需要获取运营商则可以使用上面方法即可。

API22以后SDK支持了双卡双待,可以通过下面方法获取,但是需要android.permission.READ_PHONE_STATE权限

SubscriptionManager subManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        if (subManager.getActiveSubscriptionInfoCount() >= 1) {
            int mcc1 = subManager.getActiveSubscriptionInfo(0).getMcc();
            int mnc1 = subManager.getActiveSubscriptionInfo(0).getMnc();
        }

        if(subManager.getActiveSubscriptionInfoCount() >= 2) {
            int mcc2 = subManager.getActiveSubscriptionInfo(1).getMcc();
            int mnc2 = subManager.getActiveSubscriptionInfo(1).getMnc();
        }
1

评论区