手机IMSI码规则更新-通过IMSI判断运营商的方法
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判断运营商的方法相关推荐
- 通过IMSI判断运营商的方法
因为某些SIM/USIM卡没有写入卡号,所以通过相关接口读取手机号的时候可能为空,鉴于此,使用IMSI的MCC/MNC来判断运营商是比较准确的选择: public static boolean isC ...
- 介绍一种Android 平台 不需要获取imei imsi 无权限就能获取手机运营商的方法
demo 链接:https://github.com/miqt/GetOperator 先贴一下需要权限,然后通过获取 imsi 根据前缀判断运营商的方法: if (checkPermission(c ...
- 手机IMEI码规则介绍
2019独角兽企业重金招聘Python工程师标准>>> 手机IMEI码由15-17位数字组成. 第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成 ...
- java 判断手机运营商_Java开发中识别手机运营商的方法
在Java开发中程序需要根据用户输入的号码判断运营商,这该怎么实现呢?而我们需要根据不同的运营商进行相应的处理,下面是爱站技术频道小编介绍的Java开发中识别手机运营商的方法. js实现方法: var ...
- Java手机号码工具类(判断运营商、获取归属地)以及简要的原理跟踪
最近做的项目有一部分关于手机号码的操作,于是搜罗了一些资料,整了一个工具类.主要有以下三个功能:判断号码是否有效.获取号码运营商.获取号码归属地. 首先需要引入google开发的相关依赖或者下载对应的 ...
- php匹配运营商,PHP根据手机号判断运营商方法分享
本文主要介绍了PHP根据手机号判断运营商,详细介绍附代码,大家可以根据最新的号段进行添加即可,通过正则判断实现,需要的朋友可以参考下,希望能帮助到大家. 道理很简单,知道手机号规则 进行正则判断就可以 ...
- php判断运营商,PHP根据手机号判断运营商
这篇文章主要介绍了PHP根据手机号判断运营商,详细介绍附代码,大家可以根据最新的号段进行添加即可,通过正则判断实现,需要的朋友可以参考下 道理很简单,知道手机号规则 进行正则判断就可以 移动:134. ...
- python判断手机号运营商_js判断手机号运营商的方法
本文实例讲述了js判断手机号运营商的方法.分享给大家供大家参考.具体如下: 在做WEB项目时,有时候需要根据用户的输入手机号码判断该号的运营商是移动.联通.电信或其他,再根据不同的运营商做出相应的处理 ...
- mysql通过正则表达式根据手机号判断运营商
最近在做一个大数据项目,其中涉及到数据需要从一个库抽到另一个库,抽取的过程中需要做一些数据清洗和转换,然后就遇到了需要根据手机号判断运营商的需求,编写sql尝试了两三个小时,才解决掉这个问题,在此写个 ...
最新文章
- 一个程序员的时间管理
- 【OFDM系列1】OFDM调制原理、参数、循环前缀、采样偏差、频偏及估计详解
- spring容器管理对象和new对象
- java挑战题_Java试题,你敢来挑战吗?
- 笔试算法题(17):奇偶数分置数组前后段 反序访问链表
- DM642图像处理程序的主要结构
- LRC软件测试自学,LRC滚动歌词制作编辑器
- 【数学建模】预测模型之BP网络预测
- 微吼直播 html5,微吼直播jssdk接入指引.pdf
- 涠洲岛形成及地形地貌特征
- 【锋迷商城】01数据库设计
- 全志定制编译Android,全志H3 Android定制化文档
- 万能表单php设计思路,在线自定义万能表单的设计思路
- codeforces-574B
- 分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求
- 小程序怎么清服务器缓存,怎么清理微信小程序缓存 微信小程序缓存删除的方法...
- 修复使用vimplus后,修改终端字体为Droid Sans Mono Nerd Font的时候虽然已经安装了但是找不到的情况
- 高职高专计算机b级,高职高专英语B级考试真题.docx
- matlab矩阵行位列维,如何在Matlab中对行矩阵的元素进行不等长度分组
- BZOJ 4407于神之怒加强版
热门文章
- 金融产品的不可能三角:收益性、风险性、流动性
- IDEA精选插件使用,建议收藏
- iOS常见错误8-Missing iOS Distribution signing identity for “XXXXX”. Xcode can request one for you.
- stm32配置wifi
- 接下来的认证考试 阿里云云计算专业认证考试(ACP级)
- 如何用java取对数_使用Java中的Math.log获取自然对数值
- 关于区块链在存证方面的应用
- 前端登录界面通用模版
- 饿了么table排序
- 3D建模:角色手办的制作流程,分分钟一个手办