Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题
2015-04-15 14:56
316 查看
<pre name="code" class="html">源地址:http://www.2cto.com/kf/201403/283038.html 由于国内的运营商问题,双卡手机获取IMSI号问题要根据厂商API 来实现。 下面我们就来做一套完整的分析运营商获取IMSI号逻辑。 1,首先我们要判断手机的平台。 1.1,判断手机是否MTK平台
<p> </p>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判断手机是否高通平台
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; }
一样出现异常就不是高通双卡平台了
然后我们在整理下逻辑
/** * @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等双卡问题
- Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题
- 关于android各种双卡手机获取imei,imsi的处理(mtk,展讯,高通等)
- 关于android各种双卡手机获取imei,imsi的处置(mtk,展讯,高通等)
- Android 解决双卡双待的问题 mtk,展讯,高通
- 完美解决高通mtkk双卡信息的获取
- 关于android各种双卡手机获取imei,imsi的处理(mtk,展讯,高通等)
- android 获取天气信息,解决了乱码的问题
- Android 微信授权登录、获取Wx用户信息,解决无法回调问题
- 关于android各种双卡手机获取imei,imsi的处置(mtk,展讯,高通等)
- 关于提高MTK,展讯,高通 平台,双卡发送短信的成功率,选卡发送问题解决
- 解决 {"ret":100030,"msg":"this api without user authorization"} android QQ第三发登录成功后获取用户信息失败的问题
- Android中get请求无法获取Location信息的问题
- Android解决部分机型获取不到系统拍照图片,图库图片问题的解决
- Android获取View的宽高为0问题的解决方法
- Android WebView shouldOverrideUrlLoading()中url添加参数获取不到问题解决
- android红米等关于读取本地文件夹图片获取路径的问题的解决
- 【Android】解决酷派F2输出Log信息缺失问题
- 安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题
- 解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限