非标识性参数—手机运营商

2.2 非标识性参数

2.2.1 手机运营商

IMSI: 国际移动用户识别码,共有15位,储存在SIM卡中,由MCC、MNC,MSIN组成。

  • MCC: (国家)移动国家号码,由3位数字组成,唯一的识别移动客户所属的国家,我国为460;
  • MNC: (运营商)由两位数字组成,用于识别移动客户所归属的移动网络。
    • 中国移动系统使用00、02、04、07,
    • 中国联通GSM系统使用01、06、09
    • 中国电信CDMA系统使用03、05、电信4G使用11,
  • MSIN: (个人)移动用户识别号码 ,

所以想要知道运营商名称,我们主要是通过判断MNC来区别是哪种运营商

2.2.1.1 获取方法

1.getSimOperator()、getSimOperatorName() :不需要任何权限

/**
不需要任何权限
getSimOperator()得到的是上网卡的运营商的MCC+MNC
getSimOperatorName()得到的是拨号卡的运营商
**/public static String getSimOperatorName(Context context){String opeType = "OTHER";TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);int simState = telManager.getSimState();if (simState != TelephonyManager.SIM_STATE_READY) {String error = null;switch (simState){case TelephonyManager.SIM_STATE_ABSENT:{//1error = "Sim" + "没有Sim卡";Log.i("Sim", "没有Sim卡");}case TelephonyManager.SIM_STATE_PIN_REQUIRED:{//2error = "Sim" + "Sim卡状态锁定,需要PIN解锁";Log.i("Sim", "Sim卡状态锁定,需要PIN解锁");}case TelephonyManager.SIM_STATE_PUK_REQUIRED:{//3error = "Sim" + "Sim卡状态锁定,需要PUK解锁";Log.i("Sim" ,"Sim卡状态锁定,需要PUK解锁");}case TelephonyManager.SIM_STATE_NETWORK_LOCKED:{//4error = "Sim" + "需要网络PIN码解锁";Log.i("Sim", "需要网络PIN码解锁");}//...}return error;}String simOperator = telManager.getSimOperator();String simOperatorName = telManager.getSimOperatorName();Log.i("Sim","getSimOperator()获取的MCC+MNC为:"+simOperator);Log.i("Sim", "getSimOperatorName()方法获取的运营商名称为:"+simOperatorName);Log.i("Sim",(simOperator=="460002") + opeType);if ("46001".equals(simOperator) || "46006".equals(simOperator) || "46009".equals(simOperator)) {opeType = "中国联通";} else if ("46000".equals(simOperator) || "46002".equals(simOperator) || "46004".equals(simOperator) || "46007".equals(simOperator)) {opeType = "中国移动";Log.i("Sim",opeType);} else if ("46003".equals(simOperator) || "46005".equals(simOperator) || "46011".equals(simOperator)) {opeType = "中国电信";} else if ("46020".equals(simOperator)) {opeType = "中国铁通";} else {opeType = "OHTER";}Log.i("Sim", "通过getSimOperator()人为判断的运营商名称是:" + opeType);return  "通过getSimOperator()人为判断的运营商名称是:" + opeType + "getSimOperatorName()方法获取的运营商名称为:"+simOperatorName;}

2 getNetWorkOperator()、getNetworkOperatorName(): 不需要权限

/**
不需要权限
getNetWorkOperator()得到的是拨号卡的运营商MCC+MNC
getNetworkOperatorName()得到的是拨号卡的运营商
**/
public static String getNetWorkOperatorName(Context context) {String opeType = "OTHER";TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//用于判断拨号那张卡的运营商int phoneType = telManager.getPhoneType();if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {Log.i("Sim", "getNetWorkOperatorNameTest: 在CDMA网络上,不可靠,所以不用这种方法");return "getNetWorkOperatorNameTest: 在CDMA网络上,不可靠,所以不用这种方法";}switch (phoneType){case 0:{Log.i("Sim", "getPhoneType()网络类型为:NO_PHONE");}case 1:{Log.i("Sim", "getPhoneType()网络类型为:GSM_PHONE");}case 2:{Log.i("Sim", "getPhoneType()网络类型为:CDMA_PHONE");}case 3:{Log.i("Sim", "getPhoneType()网络类型为:SIP_PHONE");}case 4:{Log.i("Sim", "getPhoneType()网络类型为:THIRD_PARTY_PHONE");}case 5:{Log.i("Sim", "getPhoneType()网络类型为:IMS_PHONE");}case 6:{Log.i("Sim", "getPhoneType()网络类型为:CDMA_LTE_PHONE");}}String networkOperator = telManager.getNetworkOperator();String networkOperatorName = telManager.getNetworkOperatorName();Log.i("Sim", "getNetWorkOperator()获取的MCC+MNC为:"+ networkOperator);Log.i("Sim", "getNetworkOperatorName()方法获取的网络类型名称是:" + networkOperatorName);if ("46001".equals(networkOperator) || "46006".equals(networkOperator) || "46009".equals(networkOperator)) {opeType = "中国联通";} else if ("46000".equals(networkOperator) || "46002".equals(networkOperator) || "46004".equals(networkOperator) || "46007".equals(networkOperator)) {opeType = "中国移动";} else if ("46003".equals(networkOperator) || "46005".equals(networkOperator) || "46011".equals(networkOperator)) {opeType = "中国电信";} else {opeType = "OHTER";}Log.i("Sim", "通过getNetWorkOperator()人为判断的运营商名称是:" + opeType);return "通过getNetWorkOperator()人为判断的运营商名称是:" + opeType + "getNetworkOperatorName()方法获取的网络类型名称是:" + networkOperatorName;}
2.2.1.2 获取方法总结

getSimOperator()得到上网卡运营商
getSimOperatorName()、getNetworkOperator()、getNetworkOperatorName()得到拨号卡运营商

问题一 如果想得到运营商名称,可直接用getSimOperatorName()或者getNetworkOperatorName()就能直接获取到。为什么还要用getNetworkOperator()通过MNC号来人为的判断?
因为在有些手机上,获取到的名称是CMCC、CUCC、CTCC,而不是中国移动、中国联通、中国电信,所以需要我们人为的判断。

参考链接

手机运营商:https://blog.csdn.net/Myfittinglife/article/details/118685804

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【rabbitMQ】rabbitMQ用户,虚拟机地址(添加,修改,删除操作)

rabbitMQ的下载,安装和配置 https://blog.csdn.net/m0_67930426/article/details/134892759?spm1001.2014.3001.5502 rabbitMQ控制台模拟收发消息 https://blog.csdn.net/m0_67930426/article/details/134904365?spm1001.2014.3001.5502 目录 用户 添加用户…

MyBatis 四大核心组件之 StatementHandler 源码解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

CPU设计——Triumphcore——MP_work版本

该版本用作系统寄存器的实现,M/S/U状态的实现与切换,以及load/store的虚实地址转换 设计指标 2023.12.8 2023.12.9 不实现mideleg和medeleg,因此一旦出现异常,直接切换至M态, 调试记录 到存储区中取PTE要额外至少…

airserver mac 7.27官方破解版2024最新安装激活图文教程

airserver mac 7.27官方破解版是一款好用的airplay投屏工具,可以轻松将ios荧幕镜像(airplay)至mac上,在mac平台上实现视频、音频、幻灯片等文件资源的接收及投放演示操作,解决iphone或ipad的屏幕录像问题,满…

SpringBootAdmin设置邮件通知

如果你想要在Spring Boot Admin中配置邮件通知&#xff0c;可以按照以下步骤进行操作&#xff1a; 添加邮件通知的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dep…

Linux C/C++ 从内存转储中恢复64位ELF可执行文件

ELF&#xff08;Executable and Linking Format&#xff09;是一种对象文件的格式&#xff0c;它主要用于定义ELF&#xff08;Executable and Linking Format&#xff09;是一种对象文件的格式&#xff0c;它主要用于定义不同类型的对象文件中的内容以及它们的存储方式。一个EL…

作业调度算法(含详细计算过程)和进程调度算法浅析

一.作业调度 作业调度算法需要知道以下公式 周转时间完成时间 - 到达时间 带权周转时间周转时间/运行时间 注&#xff1a;带权周转时间越大&#xff0c;作业&#xff08;或进程&#xff09;越短&#xff1b;带权周转时间越小&#xff0c;作业&#xff08;或进程&#xff09;越…

[git] 远程删除分支

[git] 远程删除分支 1. git删除远程分支 git push origin --delete [branch_name]2. 删除本地分支区别 git branch -d 会在删除前检查merge状态&#xff08;其与上游分支或者与head&#xff09;。git branch -D 是git branch --delete --force的简写&#xff0c;它会直接删除…

Redis生产实战-Redis集群故障探测以及降级方案设计

Redis 集群故障探测 在生产环境中&#xff0c;如果 Redis 集群崩溃了&#xff0c;那么会导致大量的请求打到数据库中&#xff0c;会导致整个系统都崩溃&#xff0c;所以系统需要可以识别缓存故障&#xff0c;限流保护数据库&#xff0c;并且启动接口的降级机制 降级方案设计 …

《C++20设计模式》---原型模式学习笔记代码

C20设计模式 第 4 章 原型模式学习笔记笔记代码 第 4 章 原型模式 学习笔记 笔记代码 #include<iostream> #include<string>// #define VALUE_OF_ADDRESS // PP_4_2_1 (no define: PP_4_2_2) namespace PP_4_2 {class Address{public:std::string street;std::st…

《C++20设计模式》学习笔记---原型模式

C20设计模式 第 4 章 原型模式4.1 对象构建4.2 普通拷贝4.3 通过拷贝构造函数进行拷贝4.4 “虚”构造函数4.5 序列化4.6 原型工厂4.7 总结4.8 代码 第 4 章 原型模式 考虑一下我们日常使用的东西&#xff0c;比如汽车或手机。它们并不是从零开始设计的&#xff0c;相反&#x…

超过 50% 的内部攻击使用特权提升漏洞

特权提升漏洞是企业内部人员在网络上进行未经授权的活动时最常见的漏洞&#xff0c;无论是出于恶意目的还是以危险的方式下载有风险的工具。 Crowdstrike 根据 2021 年 1 月至 2023 年 4 月期间收集的数据发布的一份报告显示&#xff0c;内部威胁正在上升&#xff0c;而利用权…

基于SSM的剧本杀预约系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

【第三届】:“玄铁杯”RISC-V应用创新大赛(基于yolov5和OpenCv算法 — 智能警戒哨兵)

文章目录 前言 一、智能警戒哨兵是什么&#xff1f; 二、方案流程图 三、硬件方案 四、软件方案 五、演示视频链接 总结 前言 最近参加了第三届“玄铁杯”RISC-V应用创新大赛&#xff0c;我的创意题目是基于 yolov5和OpenCv算法 — 智能警戒哨兵 先介绍一下比赛&#xf…

docker容器配置MySQL与远程连接设置(纯步骤)

以下为ubuntu20.04环境&#xff0c;默认已安装docker&#xff0c;没安装的网上随便找个教程就好了 拉去mysql镜像 docker pull mysql这样是默认拉取最新的版本latest 这样是指定版本拉取 docker pull mysql:5.7查看已安装的mysql镜像 docker images通过镜像生成容器 docke…

大数据HCIE成神之路之数据预处理(1)——缺失值处理

缺失值处理 1.1 删除1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 填充1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析 1.2.2 实验思路1.2.3 实验操作步骤1.2.4 结果验证 1…

【STM32】ADC模数转换器

1 ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 STM32是数字电路&#xff0c;只有高低电平&#xff0c;没有几V电压的概念&#xff…

安装 DevEco Studio 后不能用本地 Node.js 打开

安装 DevEco Studio 后第一次打开时&#xff0c;不能用本地 Node.js 打开 答&#xff1a;因为本地 Node.js 文件夹名字中有空格 Node.js路径只能包含字母、数字、“。”、“_”、“-”、“:”和“V” 解决方法&#xff1a; 1.修改文件夹名称 2.重新下载 注意&#xff1a;找一…

Qt 通过命令行编译程序

前言 从服务器拉代码到编译成可执行文件一个脚本解决问题。使用的项目文件见上一个文章 Qt生成动态链接库并使用动态链接库 脚本代码 为了方便易懂这是一个很简单的Qt编译脚本 call E:\vs2015\VC\vcvarsall.bat x86 rmdir /s /q my-project git clone gitgitee.com:wenbai1…

【CF245H】Queries for Number of Palindromes(字符串区间dp)

Queries for Number of Palindromes - 洛谷 # Queries for Number of Palindromes ## 题面翻译 题目描述 给你一个字符串s由小写字母组成&#xff0c;有q组询问&#xff0c;每组询问给你两个数&#xff0c;l和r&#xff0c;问在字符串区间l到r的字串中&#xff0c;包含多少…