电话管理器TelephonyManager可访问电话服务信息,包括电话号码、运营商信息、wifi状态等。一些电话信息需要相应的权限,具体可以看API文件中TelephonyManager方法的说明。

获取本机号码getLine1Number(); //返回设备的电话号码

获取运营商信息

  • 第一种方法:(需要权限)
    getSubscriberId(); //获取IMSI号(IMSI号前面3位460是国家,紧接着后面2位00、 02是中国移动,01是中国联通,03是中国电信) IMSI=MCC+MNC+MSIN

  • 第二种方法:
    getSimOperator();//获取SIM运营商代码(MCC+MNC码:MCC:移动国家码,中国是460;MNC:移动网络码,00、 02是移动,01是联通,03是电信)

另外,getSimOperatorName();可以直接获取运营商的英文名哦~

关于IMSI相关详细说明请看

实现代码如下:

 public class SIMCardInfo {

        private TelephonyManager telephonyManager;
        private String IMSI;// 国际移动用户识别码

        public SIMCardInfo(Context context) {
            telephonyManager = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
        }

        //获取本机号码
        public String getPhoneNumber() {
            String PhoneNumber = null;
            PhoneNumber = telephonyManager.getLine1Number();//返回设备的电话号码
            return PhoneNumber;
        }

        //获取本机运营商信息
        /**
         * 方法一:getSubscriberId(),获取IMSI号
         * 方法二:getSimOperator()获取SIM运营商代码(MCCMNC码)/getSimOperatorName()获取运营商名称(英文)
         * 【getNetworkOperator()获取网络运营商代码/getNetworkOperatorName()获取网络运营商名称(英文)】
         * 网络运营商是网络的运营商。一般SIM运营商和网络运营商是同一个,如用移动的就只能开移动的手机网络。
         从卡获取信息有所不同。
         * @return
         */
        public String getProvidersName() {
            String ProvidersName = null;
            // <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
            IMSI = telephonyManager.getSubscriberId();//使用这个需要在manifest文件里面添加 权限<uses-permission android:name="android.permission.READ_PHONE_STATE" />
            //或者:IMSI=telephonyManager.getSimOperator();
            android.util.Log.d(TAG, "IMSI== " + IMSI);
            // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信
            try {
                if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
                    ProvidersName = "中国移动";
                } else if (IMSI.startsWith("46001")) {
                    ProvidersName = "中国联通";
                } else if (IMSI.startsWith("46003")) {
                    ProvidersName = "中国电信";
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return ProvidersName;
        }

        /**
         * 测试:getSimOperator()获取运营商代码/getSimOperatorName()获取运营商名称
         */
        public String getOperatorName(){
            String simOperator=telephonyManager.getSimOperator();
            android.util.Log.d(TAG, "SIM运营商代码: --"+simOperator);
            String simOperatorName=telephonyManager.getSimOperatorName();
            android.util.Log.d(TAG, "SIM运营商:-- "+simOperatorName);
            String networkOperator = telephonyManager.getNetworkOperator();//联网才有用
            android.util.Log.d(TAG, "网络运营商代码:-- "+networkOperator);
            String networkOperatorName = telephonyManager.getNetworkOperatorName();
            android.util.Log.d(TAG, "网络运营商:-- "+networkOperatorName);
            return simOperatorName;
        }

Log 信息在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐