ps:权限需要注意下:
READ_PHONE_STATE 读取手机的状态权限可以通过查找TelephonyManager。有些方法需要权限,比如getLine1Number(),getSubscriberId(),getDeviceId()...有些方法不需要,比如getSimOperator(),getNetworkOperator()...

一、注意:更新运营商判断规则~

中国移动系统使用00、02、04、07,中国联通GSM系统使用01、06、09,中国电信CDMA系统使用03、05、电信4G使用11,中国铁通系统使用20。

注意:getSimOperator方法不需要READ_PHONE_STATE权限


/*** 返回手机运营商名称* 中国移动系统使用00、02、04、07,中国联通GSM系统使用01、06、09,中国电信CDMA系统使用03、05、电信4G使用11,中国铁通系统使用20。*/public void getMobileOperatorName() {TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//getSimOperator方法不需要READ_PHONE_STATE权限String operator = telManager.getSimOperator();Log.d(TAG, "operator:" + operator);if (operator != null) {if (operator.equals("46000") || operator.equals("46002") || operator.equals("46004") || operator.equals("46007")) {//中国移动Log.d(TAG, "中国移动");} else if (operator.equals("46001") || operator.equals("46006") || operator.equals("46009")) {//中国联通Log.d(TAG, "中国联通");} else if (operator.equals("46003") || operator.equals("46005") || operator.equals("46011")) {//中国电信Log.d(TAG, "中国电信");} else if (operator.equals("46020")) {Log.d(TAG, "中国铁通");}}}

二、与手机卡相关的方法

1、检查手机是否有sim卡

getSimOperator方法不需要READ_PHONE_STATE权限

/*** 检查手机是否有sim卡*/public static boolean hasSim(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//getSimOperator方法不需要READ_PHONE_STATE权限String operator = telephonyManager.getSimOperator();String name = telephonyManager.getSimOperatorName();String simISO = telephonyManager.getSimCountryIso();Log.d(TAG, "hasSim operator:" + operator + "," + name + "," + simISO);if (TextUtils.isEmpty(operator)) {return false;}int simState = telephonyManager.getSimState();Log.d(TAG, "simState:" + simState);if (TelephonyManager.SIM_STATE_READY != simState) {Log.d(TAG, "simState false");return false;}return true;}
2、判断GPRS流量开关是否开启

使用反射的是准确的,后续补充说明,先记录下

/*** 判断GPRS的状态是否开启** @param context* @return*/public static boolean isMobileEnableReflex(Context context) {try {ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);Method getMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("getMobileDataEnabled");getMobileDataEnabledMethod.setAccessible(true);return (Boolean) getMobileDataEnabledMethod.invoke(connectivityManager);} catch (Exception e) {e.printStackTrace();return false;}}
3、通过蜂窝网数据返回手机运营商名称
/*** 通过蜂窝网数据返回手机运营商名称* 中国移动系统使用00、02、04、07,中国联通GSM系统使用01、06、09,中国电信CDMA系统使用03、05、电信4G使用11,中国铁通系统使用20。* return 0 移动、1联通、2电信 -1其他*/public static void getMobileOperatorNameByGPRS(Context context) {TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//getSimOperator方法不需要READ_PHONE_STATE权限String operator = telManager.getSimOperator();String name = telManager.getSimOperatorName();String simISO = telManager.getSimCountryIso();Log.d(TAG, "getSimOperator operator:" + operator + "," + name + "," + simISO);if (operator != null) {if (operator.equals(CHINA_MOBILE_46000) || operator.equals(CHINA_MOBILE_46002)|| operator.equals(CHINA_MOBILE_46004) || operator.equals(CHINA_MOBILE_46007)) {//中国移动Log.d(TAG, "中国移动");} else if (operator.equals(CHINA_UNICOM_46001) || operator.equals(CHINA_UNICOM_46006)|| operator.equals(CHINA_UNICOM_46009)) {//中国联通Log.d(TAG, "中国联通");} else if (operator.equals(CHINA_TELECOM_46003) || operator.equals(CHINA_TELECOM_46005)|| operator.equals(CHINA_TELECOM_46011)) {//中国电信Log.d(TAG, "中国电信");} else if (operator.equals("46020")) {Log.d(TAG, "中国铁通");}}}
4、通过获取设备拨号运营商获取当前运营商

getNetworkOperator方法不需要READ_PHONE_STATE权限

/*** 获取设备拨号运营商* @param context* @return*/public static void getMobileOperatorNameByDial(Context context) {TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//getNetworkOperator方法不需要READ_PHONE_STATE权限String networkOperator = telManager.getNetworkOperator();String name = telManager.getNetworkOperatorName();String simISO = telManager.getNetworkCountryIso();Log.d(TAG, "getNetworkOperator networkOperator:" + networkOperator + "," + name + "," + simISO);if (networkOperator != null) {if (networkOperator.equals(CHINA_MOBILE_46000) || networkOperator.equals(CHINA_MOBILE_46002)|| networkOperator.equals(CHINA_MOBILE_46004) || networkOperator.equals(CHINA_MOBILE_46007)) {//中国移动Log.d(TAG, "中国移动");} else if (networkOperator.equals(CHINA_UNICOM_46001) || networkOperator.equals(CHINA_UNICOM_46006)|| networkOperator.equals(CHINA_UNICOM_46009)) {//中国联通Log.d(TAG, "中国联通");} else if (networkOperator.equals(CHINA_TELECOM_46003) || networkOperator.equals(CHINA_TELECOM_46005)|| networkOperator.equals(CHINA_TELECOM_46011)) {//中国电信Log.d(TAG, "中国电信");} else if (networkOperator.equals("46020")) {Log.d(TAG, "中国铁通");}}}
5、通过getSubscribeId获取当前运营商

特别注意,需要请求敏感权限READ_PHONE_STATE。能不用就不用吧!!!!

public static void getSubscribeId(Activity context) {try {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//特别注意,需要请求敏感权限READ_PHONE_STATE。能不用就不用吧if (RequestPermissionsHelper.checkSelfPermission_self(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {//不要主动请求敏感权限return ;}String subscribeId = telephonyManager.getSubscriberId();Log.d(TAG, "subscribeId:" + subscribeId);if (subscribeId != null) {if (subscribeId.startsWith(CHINA_MOBILE_46000) || subscribeId.startsWith(CHINA_MOBILE_46002)|| subscribeId.startsWith(CHINA_MOBILE_46004) || subscribeId.startsWith(CHINA_MOBILE_46007)) {//中国移动Log.d(TAG, "中国移动");} else if (subscribeId.startsWith(CHINA_UNICOM_46001) || subscribeId.startsWith(CHINA_UNICOM_46006)|| subscribeId.startsWith(CHINA_UNICOM_46009)) {//中国联通Log.d(TAG, "中国联通");} else if (subscribeId.startsWith(CHINA_TELECOM_46003) || subscribeId.startsWith(CHINA_TELECOM_46005)|| subscribeId.startsWith(CHINA_TELECOM_46011)) {//中国电信Log.d(TAG, "中国电信");} else if (subscribeId.startsWith("46020")) {Log.d(TAG, "中国铁通");}}} catch (Exception e) {}}

手机IMSI码规则更新-通过IMSI判断运营商的方法相关推荐

  1. 通过IMSI判断运营商的方法

    因为某些SIM/USIM卡没有写入卡号,所以通过相关接口读取手机号的时候可能为空,鉴于此,使用IMSI的MCC/MNC来判断运营商是比较准确的选择: public static boolean isC ...

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

    demo 链接:https://github.com/miqt/GetOperator 先贴一下需要权限,然后通过获取 imsi 根据前缀判断运营商的方法: if (checkPermission(c ...

  3. 手机IMEI码规则介绍

    2019独角兽企业重金招聘Python工程师标准>>> 手机IMEI码由15-17位数字组成. 第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成 ...

  4. java 判断手机运营商_Java开发中识别手机运营商的方法

    在Java开发中程序需要根据用户输入的号码判断运营商,这该怎么实现呢?而我们需要根据不同的运营商进行相应的处理,下面是爱站技术频道小编介绍的Java开发中识别手机运营商的方法. js实现方法: var ...

  5. Java手机号码工具类(判断运营商、获取归属地)以及简要的原理跟踪

    最近做的项目有一部分关于手机号码的操作,于是搜罗了一些资料,整了一个工具类.主要有以下三个功能:判断号码是否有效.获取号码运营商.获取号码归属地. 首先需要引入google开发的相关依赖或者下载对应的 ...

  6. php匹配运营商,PHP根据手机号判断运营商方法分享

    本文主要介绍了PHP根据手机号判断运营商,详细介绍附代码,大家可以根据最新的号段进行添加即可,通过正则判断实现,需要的朋友可以参考下,希望能帮助到大家. 道理很简单,知道手机号规则 进行正则判断就可以 ...

  7. php判断运营商,PHP根据手机号判断运营商

    这篇文章主要介绍了PHP根据手机号判断运营商,详细介绍附代码,大家可以根据最新的号段进行添加即可,通过正则判断实现,需要的朋友可以参考下 道理很简单,知道手机号规则 进行正则判断就可以 移动:134. ...

  8. python判断手机号运营商_js判断手机号运营商的方法

    本文实例讲述了js判断手机号运营商的方法.分享给大家供大家参考.具体如下: 在做WEB项目时,有时候需要根据用户的输入手机号码判断该号的运营商是移动.联通.电信或其他,再根据不同的运营商做出相应的处理 ...

  9. mysql通过正则表达式根据手机号判断运营商

    最近在做一个大数据项目,其中涉及到数据需要从一个库抽到另一个库,抽取的过程中需要做一些数据清洗和转换,然后就遇到了需要根据手机号判断运营商的需求,编写sql尝试了两三个小时,才解决掉这个问题,在此写个 ...

最新文章

  1. 一个程序员的时间管理
  2. 【OFDM系列1】OFDM调制原理、参数、循环前缀、采样偏差、频偏及估计详解
  3. spring容器管理对象和new对象
  4. java挑战题_Java试题,你敢来挑战吗?
  5. 笔试算法题(17):奇偶数分置数组前后段 反序访问链表
  6. DM642图像处理程序的主要结构
  7. LRC软件测试自学,LRC滚动歌词制作编辑器
  8. 【数学建模】预测模型之BP网络预测
  9. 微吼直播 html5,微吼直播jssdk接入指引.pdf
  10. 涠洲岛形成及地形地貌特征
  11. 【锋迷商城】01数据库设计
  12. 全志定制编译Android,全志H3 Android定制化文档
  13. 万能表单php设计思路,在线自定义万能表单的设计思路
  14. codeforces-574B
  15. 分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求
  16. 小程序怎么清服务器缓存,怎么清理微信小程序缓存 微信小程序缓存删除的方法...
  17. 修复使用vimplus后,修改终端字体为Droid Sans Mono Nerd Font的时候虽然已经安装了但是找不到的情况
  18. 高职高专计算机b级,高职高专英语B级考试真题.docx
  19. matlab矩阵行位列维,如何在Matlab中对行矩阵的元素进行不等长度分组
  20. BZOJ 4407于神之怒加强版

热门文章

  1. 金融产品的不可能三角:收益性、风险性、流动性
  2. IDEA精选插件使用,建议收藏
  3. iOS常见错误8-Missing iOS Distribution signing identity for “XXXXX”. Xcode can request one for you.
  4. stm32配置wifi
  5. 接下来的认证考试 阿里云云计算专业认证考试(ACP级)
  6. 如何用java取对数_使用Java中的Math.log获取自然对数值
  7. 关于区块链在存证方面的应用
  8. 前端登录界面通用模版
  9. 饿了么table排序
  10. 3D建模:角色手办的制作流程,分分钟一个手办