Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题
由于国内的运营商问题,双卡手机获取IMSI号问题要根据厂商API 来实现。
下面我们就来做一套完整的分析运营商获取IMSI号逻辑。
1,首先我们要判断手机的平台。
1.1,判断手机是否MTK平台
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
public static MtkDoubleInfo initMtkDoubleSim(Context mContext) { MtkDoubleInfo mtkDoubleInfo = new MtkDoubleInfo(); try { TelephonyManager tm = (TelephonyManager) mContext .getSystemService(Context.TELEPHONY_SERVICE); Class<?> c = Class.forName("com.android.internal.telephony.Phone"); Field fields1 = c.getField("GEMINI_SIM_1"); fields1.setAccessible(true); mtkDoubleInfo.setSimId_1((Integer) fields1.get(null)); Field fields2 = c.getField("GEMINI_SIM_2"); fields2.setAccessible(true); mtkDoubleInfo.setSimId_2((Integer) fields2.get(null)); Method m = TelephonyManager.class.getDeclaredMethod( "getSubscriberIdGemini", int.class); mtkDoubleInfo.setImsi_1((String) m.invoke(tm, mtkDoubleInfo.getSimId_1())); mtkDoubleInfo.setImsi_2((String) m.invoke(tm, mtkDoubleInfo.getSimId_2())); Method m1 = TelephonyManager.class.getDeclaredMethod( "getDeviceIdGemini", int.class); mtkDoubleInfo.setImei_1((String) m1.invoke(tm, mtkDoubleInfo.getSimId_1())); mtkDoubleInfo.setImei_2((String) m1.invoke(tm, mtkDoubleInfo.getSimId_2())); Method mx = TelephonyManager.class.getDeclaredMethod( "getPhoneTypeGemini", int.class); mtkDoubleInfo.setPhoneType_1((Integer) mx.invoke(tm, mtkDoubleInfo.getSimId_1())); mtkDoubleInfo.setPhoneType_2((Integer) mx.invoke(tm, mtkDoubleInfo.getSimId_2())); if (TextUtils.isEmpty(mtkDoubleInfo.getImsi_1()) && (!TextUtils.isEmpty(mtkDoubleInfo.getImsi_2()))) { mtkDoubleInfo.setDefaultImsi(mtkDoubleInfo.getImsi_2()); } if (TextUtils.isEmpty(mtkDoubleInfo.getImsi_2()) && (!TextUtils.isEmpty(mtkDoubleInfo.getImsi_1()))) { mtkDoubleInfo.setDefaultImsi(mtkDoubleInfo.getImsi_1()); } } catch (Exception e) { mtkDoubleInfo.setMtkDoubleSim(false); return mtkDoubleInfo; } mtkDoubleInfo.setMtkDoubleSim(true); return mtkDoubleInfo; } |
直接判断异常。出现异常证明就不是MTK平台了。
1.2判断手机是否高通平台
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public static GaotongDoubleInfo initQualcommDoubleSim(Context mContext) { GaotongDoubleInfo gaotongDoubleInfo = new GaotongDoubleInfo(); gaotongDoubleInfo.setSimId_1(0); gaotongDoubleInfo.setSimId_2(1); try { Class<?> cx = Class .forName("android.telephony.MSimTelephonyManager"); Object obj = mContext.getSystemService("phone_msim"); Method md = cx.getMethod("getDeviceId", int.class); Method ms = cx.getMethod("getSubscriberId", int.class); gaotongDoubleInfo.setImei_1((String) md.invoke(obj, gaotongDoubleInfo.getSimId_1())); gaotongDoubleInfo.setImei_2((String) md.invoke(obj, gaotongDoubleInfo.getSimId_2())); gaotongDoubleInfo.setImsi_1((String) ms.invoke(obj, gaotongDoubleInfo.getSimId_1())); gaotongDoubleInfo.setImsi_2((String) ms.invoke(obj, gaotongDoubleInfo.getSimId_2())); } catch (Exception e) { e.printStackTrace(); gaotongDoubleInfo.setGaotongDoubleSim(false); return gaotongDoubleInfo; } return gaotongDoubleInfo; } |
一样出现异常就不是高通双卡平台了
然后我们在整理下逻辑
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/** * @param c * @return 返回平台数据 */public Object isDoubleSim(Context c) { GaotongDoubleInfo gaotongDoubleInfo = MultiSimUtility .initQualcommDoubleSim(c); MtkDoubleInfo mtkDoubleInfo = MultiSimUtility.initMtkDoubleSim(c); boolean isGaoTongCpu = gaotongDoubleInfo.isGaotongDoubleSim(); boolean isMtkCpu = mtkDoubleInfo.isMtkDoubleSim(); if (isGaoTongCpu) { // 高通芯片双卡 return gaotongDoubleInfo; } else if (isMtkCpu) { // MTK芯片双卡 return mtkDoubleInfo; } else { //普通单卡手机 return null; } } |
这个时候我们基本上获取到了手机的平台和每张卡的信息。单卡手机获取信息就不贴代码了。
Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题的更多相关文章
- # Linux Whois3获取 运营商信息
Linux Whois3获取 运营商信息 APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信息也是对外公开的,并提供了一个查询工具,下面就让我们看看如何在Linux ...
- iOS获取运营商的相关信息
1.导入:CoreTelephony.framework 2.添加头文件 #import <CoreTelephony/CTTelephonyNetworkInfo.h> #import ...
- android获取设备全部信息
private static final String FILE_MEMORY = "/proc/meminfo"; private static final String FIL ...
- MTK Android 读取SIM卡参数,获取sim卡运营商信息
android 获取sim卡运营商信息(转) TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TE ...
- Android系统分析之运营商显示流程分析之运营商信息的读取流程二
运营商显示流程分析之运营商信息的读取流程 一. SIM卡运营商信息的读取 从前面的 运营商信息的获取和赋值 可以知道SIM卡运营商的赋值最终是在 SIMRecords 中完成的, 而SIM卡信息的相关 ...
- Android基础总结(精华完整版)
1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. Ÿ 第四代移动通信技术( ...
- [Q]“获取AutoCAD安装信息时失败...”解决方法
“获取AutoCAD安装信息时失败...”解决方法:在“setup.exe”上右键,以管理员权限运行即可.
- 获取及管理Android 手机运营商及状态
主要类 TelephonyManager: telephonyManager.getCellLocation();//获得服务区 telephonyManager.getCellId();//获得服务 ...
- PHP--根据手机号-淘宝平台获取归属地运营商信息
//获取手机账号信息 public function get_mobile_area($mobile){ $sms = array('province'=>'', 'supplier'=> ...
随机推荐
- 除了判断语句if switch 我们还可以怎么做?-b
之前项目中有根据后台数据执行不同代码,根据不同的字符串返回不同UIViewController对象,最开始需要的vc 种类不多我用的是if else 做字符串比较再执行不同代码,但是如果需求的vc 有 ...
- 在ios开发中有多少常用的加密解密方式(备用)
最常用的是MD5和base64编码,还有DES 3DES AES加密 ios怎么实现RAS加密解密 最近几天折腾了一下如何在iOS上使用RSA来加密.iOS上并没有直接的RSA加密API.但是iOS提 ...
- VBA在EXCEL中创建图形线条
EXCEL使用了多少行: ActiveSheet.UsedRange.Rows.Count(再也不用循环到头啦) 创建线条并命名:ActiveSheet.Shapes.AddLine(x1,y1,x2 ...
- leetcode第三题Longest Substring Without Repeating Characters java
Longest Substring Without Repeating Characters Given a string, find the length of the longest substr ...
- 守望先锋overwatch美服外服设置方法
打开:C:\Users\你的用户名\AppData\Roaming\Battle.net\Battle.net.config 替换为下方内容: { "Client": { &quo ...
- Python isinstance判断对象类型
在Python中只需要使用内置的函数isinstance,使用起来非常简单,比如下面的例子: class objA: pass A = objA() B = 'a','v' C = 'a string ...
- NOI冲刺计划2
吐槽:距离上一次写计划还没有一个月呢,咋又喊要重写捏?可以直接从上一次的计划粘上个一大半. bzoj刷题速度还是在计划之内的,这大半个月中,我bzoj刷进500道,知识方面主要是把莫比乌斯反演系统性的 ...
- bzoj 2693: jzptab 线性筛积性函数
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 444 Solved: 174[Submit][Status][Discus ...
- 如何解决jquery版本冲突
<!-- 引入1.6.4版的jq --> <script src="<a href="http://ajax.googleapis.com/ajax/lib ...
- oracle的sqlnet.ora , tnsnames.ora , Listener.ora 文件的作用(转)
oracle网络配置三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下.1. sqlnet.o ...