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'=> ...
随机推荐
- DM8168 解码显示模块代码阅读分析
解码/显示概述:从共享文件夹获取H264流,对264流进行解析,生成hdr文件,hdr文件中包含每一帧的信息,将视频帧信息存放在A8核分配的共享内存空间,供其他核或其他的link调用,M3 Video ...
- python的random函数
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- sharepoint 2013创建外部内容类型并创建外部列表
步骤: 1.如何:基于 SQL Server 表创建外部内容类型 How to: Create an External Content Type Based on a SQL Server Table ...
- Ecmall系统自带的分页功能
在Ecmall的二次开发中,分页是必不可少的.这个系统已经自带了分页功能,下面来看看如何使用这个分页. 下面是一个自定义的类,用于查看订单的详细情况.关键在于get_order_data()这个方法, ...
- asp.net 登陆后在ashx处理程序中获取不到Session
登录后存储Session,另一个页面Ajax请求 ashx页面,发现无法获取到Session,Session is NULL 使用“IReadOnlySessionState”这个接口就可以
- Android开源项目发现---Layout 篇(持续更新)
1. achartengine 强大的图标绘制工具 支持折线图.面积图.散点图.时间图.柱状图.条图.饼图.气泡图.圆环图.范围(高至低)条形图.拨号图/表.立方线图及各种图的结合 项目地址:http ...
- 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique
2016-10-09 23:14:43.177 DEBUG [restartedMain][org.springframework.core.type.classreading.AnnotationA ...
- XtraForm中更换皮肤
前提: 默认皮肤的显示http://www.cnblogs.com/chucklu/p/4785572.html 1.修改XtraForm的LookAndFeel的SkinName属性,设置为Cara ...
- Oracle core03_ACID
ACID特性 oracle如何使用undo和redo来保证了关系数据库的ACID特性. ACID的特性简单描述为: Atomic:以事务为单位的原子性 Consistency:保证数据一致性 Isol ...
- 在Azure中使用Load Runner测试TCP最大并发连接数
对于Azure中的每一台虚机,它所能支持的TCP最大并发连接数是50万(参考微软官网: http://azure.microsoft.com/en-us/documentation/articles/ ...