gflkdns / GetOperator

一种Android 平台 不需要获取imei imsi 无权限就能获取手机运营商的方法

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GetOperator

一种Android 平台 不需要获取imei imsi 无权限就能获取手机运营商的方法

先贴一下需要权限,然后通过获取 imsi 根据前缀判断运营商的方法:

if (checkPermission(context, Manifest.permission.READ_PHONE_STATE)) {
                TelephonyManager mTelephonyMgr = (TelephonyManager)
                        context.getSystemService(Context.TELEPHONY_SERVICE);
                if (mTelephonyMgr != null) {
                    String imsi = mTelephonyMgr.getSimOperator();
                    if (isEmpty(imsi)) {
                        imsi = mTelephonyMgr.getSubscriberId();
                    }
                    if (!isEmpty(imsi)) {
                        if (imsi.startsWith("46000") || imsi.startsWith("46002")) {
                            return carrierName = "**移动";
                        } else if (imsi.startsWith("46001")) {
                            return carrierName = "**联通";
                        } else if (imsi.startsWith("46003")) {
                            return carrierName = "**电信";
                        }
                    }
                }
            }

但随着隐私合规等限制,以上方法由于需要获取imsi,导致不推荐使用了,下面就来推荐一个不需要获取imsi 就能获取运营商的方法。

我们都知道 Android 会根据设备设置的不同,去加载不同的资源文件夹。最典型的,会根据系统的语言去加载不同语言的字符串资源。而 Android 也是可以根据 MCC 和 MNC 加载不同的资源的。而我们就可以利用这一点,通过创建 values-mcc460-mnc00 这种资源文件夹,然后在对应的文件夹,放置不同的运营商名称即可。 在这里插入图片描述 附带一张国家代码对照表: 在这里插入图片描述 当然其他国家也有: 在这里插入图片描述 https://zh.wikipedia.org/wiki/%E7%A7%BB%E5%8A%A8%E8%AE%BE%E5%A4%87%E7%BD%91%E7%BB%9C%E4%BB%A3%E7%A0%81

最后使用方式非常简单,只是获取下资源字符串就可以了,Android系统会自动导航到正确的运营商名称。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView view = findViewById(R.id.text);
        view.setText(getString(R.string.operator));
    }
}

About

一种Android 平台 不需要获取imei imsi 无权限就能获取手机运营商的方法


Languages

Language:Java 100.0%