转自:http://www.sum16.com/desinger/android-get-double-imei-include-made-in-china.html

import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.telephony.TelephonyManager;
import android.widget.Toast;public class getImei {Context context = null;public getImei(Context _context) {context = _context;}public String getimei() {try {TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);String imei = tm.getDeviceId();List<String> IMEIS = new ArrayList<String>();if (checkimei(imei.trim())) {IMEIS.add(imei.trim());}try{TelephonyManager telephonyManager1 = (TelephonyManager)context.getSystemService("phone1");String imeiphone1=   telephonyManager1.getDeviceId();if (imeiphone1 != null && checkimei(imeiphone1)) { if (!IMEIS.contains(imeiphone1)) {IMEIS.add(imeiphone1); }}}  catch (Exception e) {}try{TelephonyManager telephonyManager2 = (TelephonyManager)context.getSystemService("phone2");String imeiphone2=   telephonyManager2.getDeviceId();if (imeiphone2 != null && checkimei(imeiphone2)) { if (!IMEIS.contains(imeiphone2)) {IMEIS.add(imeiphone2); }}}  catch (Exception e) {}List<String> imeis = IMEI_initQualcommDoubleSim();if (imeis != null && imeis.size() > 0) {for (String item : imeis) {if (!IMEIS.contains(item)) {IMEIS.add(item);}}}imeis = IMEI_initMtkSecondDoubleSim();if (imeis != null && imeis.size() > 0) {for (String item : imeis) {if (!IMEIS.contains(item)) {IMEIS.add(item);}}}imeis = IMEI_initMtkDoubleSim();if (imeis != null && imeis.size() > 0) {for (String item : imeis) {if (!IMEIS.contains(item)) {IMEIS.add(item);}}}imeis = IMEI_initSpreadDoubleSim();if (imeis != null && imeis.size() > 0) {for (String item : imeis) {if (!IMEIS.contains(item)) {IMEIS.add(item);}}}StringBuffer IMEI_SB = new StringBuffer();Integer TIMES_TEMP = 1;for (String item : IMEIS) {if (TIMES_TEMP > 1) {IMEI_SB.append('\n');}IMEI_SB.append(item);// params.put("IMEI" + TIMES_TEMP, item);TIMES_TEMP++;}String imeis_tmp = IMEI_SB.toString().trim();if ("".equals(imeis_tmp)) {imeis_tmp = "no_imei_1";}return imeis_tmp;//// TextView_imei.setText(IMEI_SB.toString());//// WriteFile("imei", IMEI_SB.toString());} catch (Exception e) {Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();return "no_imei_2";}}private Boolean checkimeisame(String imei) {char firstchar = '0';if (imei.length() > 0) {firstchar = imei.charAt(0);}Boolean issame = true;for (int i = 0; i < imei.length(); i++) {char ch = imei.charAt(i);if (firstchar != ch) {issame = false;break;}}return issame;// if (issame) {// // 全是相同字符;// } else {// // 包含不同字符// }}private Boolean checkimei(String IMEI) {Integer LEN = IMEI.length();if (LEN > 10 && LEN < 20 && !checkimeisame(IMEI.trim())) {return true;}return false;}private List<String> IMEI_initMtkDoubleSim() {try {TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);Class<?> c = Class.forName("com.android.internal.telephony.Phone");Integer simId_1, simId_2;try {java.lang.reflect.Field fields1 = c.getField("GEMINI_SIM_1");fields1.setAccessible(true);simId_1 = (Integer) fields1.get(null);java.lang.reflect.Field fields2 = c.getField("GEMINI_SIM_2");fields2.setAccessible(true);simId_2 = (Integer) fields2.get(null);} catch (Exception ex) {simId_1 = 0;simId_2 = 1;}// java.lang.reflect.Method m = TelephonyManager.class// .getDeclaredMethod("getSubscriberIdGemini", int.class);// String imsi_1 = (String) m.invoke(tm, simId_1);// String imsi_2 = (String) m.invoke(tm, simId_2);java.lang.reflect.Method m1 = TelephonyManager.class.getDeclaredMethod("getDeviceIdGemini", int.class);String imei_1 = ((String) m1.invoke(tm, simId_1)).trim();String imei_2 = ((String) m1.invoke(tm, simId_2)).trim();// java.lang.reflect.Method mx = TelephonyManager.class// .getDeclaredMethod("getPhoneTypeGemini", int.class);// Integer phoneType_1 = (Integer) mx.invoke(tm, simId_1);// Integer phoneType_2 = (Integer) mx.invoke(tm, simId_2);// String defaultImsi = "";// if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {// defaultImsi = imsi_2;// }// if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {// defaultImsi = imsi_1;// }List<String> imeis = new ArrayList<String>();if (checkimei(imei_1)) {imeis.add(imei_1);}if (checkimei(imei_2)) {imeis.add(imei_2);}return imeis;} catch (Exception e) {// ��MTKreturn null;}}private List<String> IMEI_initMtkSecondDoubleSim() {try {TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);Class<?> c = Class.forName("com.android.internal.telephony.Phone");Integer simId_1, simId_2;try {java.lang.reflect.Field fields1 = c.getField("GEMINI_SIM_1");fields1.setAccessible(true);simId_1 = (Integer) fields1.get(null);java.lang.reflect.Field fields2 = c.getField("GEMINI_SIM_2");fields2.setAccessible(true);simId_2 = (Integer) fields2.get(null);} catch (Exception ex) {simId_1 = 0;simId_2 = 1;}java.lang.reflect.Method mx = TelephonyManager.class.getMethod("getDefault", int.class);TelephonyManager tm1 = (TelephonyManager) mx.invoke(tm, simId_1);TelephonyManager tm2 = (TelephonyManager) mx.invoke(tm, simId_2);// String imsi_1 = tm1.getSubscriberId();// String imsi_2 = tm2.getSubscriberId();String imei_1 = (tm1.getDeviceId()).trim();String imei_2 = (tm2.getDeviceId()).trim();//// Integer phoneType_1 = tm1.getPhoneType();// Integer phoneType_2 = tm2.getPhoneType();// String defaultImsi = "";// if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {// defaultImsi = imsi_2;// }// if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {// defaultImsi = imsi_1;// }List<String> imeis = new ArrayList<String>();if (checkimei(imei_1)) {imeis.add(imei_1);}if (checkimei(imei_2)) {imeis.add(imei_2);}return imeis;} catch (Exception e) {return null;}}private List<String> IMEI_initSpreadDoubleSim() {try {Class<?> c = Class.forName("com.android.internal.telephony.PhoneFactory");java.lang.reflect.Method m = c.getMethod("getServiceName",String.class, int.class);String spreadTmService = (String) m.invoke(c,Context.TELEPHONY_SERVICE, 1);TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);// String imsi_1 = tm.getSubscriberId();String imei_1 = (tm.getDeviceId()).trim();// Integer phoneType_1 = tm.getPhoneType();TelephonyManager tm1 = (TelephonyManager) context.getSystemService(spreadTmService);// String imsi_2 = tm1.getSubscriberId();String imei_2 = (tm1.getDeviceId()).trim();// Integer phoneType_2 = tm1.getPhoneType();// String defaultImsi = "";// if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {// defaultImsi = imsi_2;// }// if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {// defaultImsi = imsi_1;// }List<String> imeis = new ArrayList<String>();if (checkimei(imei_1)) {imeis.add(imei_1);}if (checkimei(imei_2)) {imeis.add(imei_2);}return imeis;} catch (Exception e) {return null;}}public List<String> IMEI_initQualcommDoubleSim() {try {TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);Class<?> cx = Class.forName("android.telephony.MSimTelephonyManager");Object obj = context.getSystemService("phone_msim");Integer simId_1 = 0;Integer simId_2 = 1;//// java.lang.reflect.Method mx = cx.getMethod("getDataState");// // int stateimei_1 = (Integer) mx.invoke(cx.newInstance());// int stateimei_2 = tm.getDataState();// java.lang.reflect.Method mde = cx.getMethod("getDefault");java.lang.reflect.Method md = cx.getMethod("getDeviceId", int.class);// java.lang.reflect.Method ms = cx.getMethod("getSubscriberId",// int.class);// java.lang.reflect.Method mp = cx.getMethod("getPhoneType");// Object obj = mde.invoke(cx);String imei_1 = ((String) md.invoke(obj, simId_1)).trim();String imei_2 = ((String) md.invoke(obj, simId_2)).trim();// String imsi_1 = (String) ms.invoke(obj, simId_1);// String imsi_2 = (String) ms.invoke(obj, simId_2);// int statephoneType_1 = tm.getDataState();// int statephoneType_2 = (Integer) mx.invoke(obj);List<String> imeis = new ArrayList<String>();if (checkimei(imei_1)) {imeis.add(imei_1);}if (checkimei(imei_2)) {imeis.add(imei_2);}return imeis;// Log.e("tag", statephoneType_1 + "---" + statephoneType_2);// Class<?> msc = Class.forName("android.telephony.MSimSmsManager");// for (Method m : msc.getMethods()) {// if (m.getName().equals("sendTextMessage")) {// m.getParameterTypes();// }// Log.e("tag", m.getName());// }} catch (Exception e) {return null;}}}

获取手机IMEI(包括各种平台的双卡双待手机)相关推荐

  1. 17个国内外手机APP应用开发平台推荐

    17个国内外手机APP应用开发平台推荐 随着智能手机的不断普及,安卓.苹果系统不断冲击着手机用户的神经,越来越多的技术热人员投入到了手机应用开发的热潮中,这里就总结归类下那些国内外优秀的手机APP应用 ...

  2. 双卡双待手机的原理 转贴

    手机通讯发展到一定程度之后,很多用户希望拥有或已经拥用多个手机电话号码,特别是针对那些经常需要出差,需要经常切换SIM卡的商务人士而言,其迫切希望能将自己的手机承载多个电话号码,根据市场上的这一需求, ...

  3. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  4. 获取设备IMEI ,手机名称,系统SDK版本号,系统版本号

    1.获取设备IMEI TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); Str ...

  5. Android之获取手机IMEI号和IMSI号

    首先我们看一下IMEI号和IMSI号是什么: (1)IMEI(International Mobile Equipment Identity,国际移动身份识别码):是由15位数字组成的"电子 ...

  6. Android获取手机IMEI,IMSI, MAC标识和唯一标识的生成

    急的直接看这个: android 获取设备IMEI与序列号: ​ //IMEI(imei) TelephonyManager tm = (TelephonyManager) ChinaApplicat ...

  7. Android 获取手机系统版本号、获取手机型号、获取手机厂商、获取手机IMEI、获取手机CPU_ABI、获取手机唯一识别码

    1.先申请权限,关于如何申请权限请查看RxPermissions的使用(简单实用)_ErwinNakajima的博客-CSDN博客 2.手機唯一識別碼管理類. package com.phone.co ...

  8. unity获取手机IMEI码

    1.Android小白的体会:unity获取Android手机的IMEI码 在AndroidStudio中的撸代码,如下: /*** 获取手机IMEI(需要"android.permissi ...

  9. Android获取手机IMEI号和IMSI号

    下面是主要内容: IMEI 和 IMSI 是什么 如何获取 IMEI 和 IMSI 代码示例 1. 先看下 IMEI 和 IMSI 是什么 IMEI(International Mobile Equi ...

最新文章

  1. mysql 转成树_mysql整形转换的坑
  2. 强制回收和IDisposable.Dispose方法
  3. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?(3)
  4. 【数据库系统概论】考研第二部分重点分析【2.1】
  5. python tkinter chk
  6. android 多选项实现
  7. java 重载 equals_实现Student类的equals重载函数
  8. html5实现视频播放器 弹幕效果,基于HTML5的有弹幕功能的视频播放器
  9. 使用ImageJ软件计算信噪比(SNR)的小工具
  10. DrGraph - SVG模块之一:显示与节点选择
  11. linux 内核网络中 RPS/RFS 原理Ⅱ
  12. pvid与access的关系_浅谈PVID和VID区别
  13. Apache Rewrite详细配置与使用说明
  14. ccf试题1:分蛋糕
  15. Android 图片倒影
  16. 解决谷歌浏览器打开后是毒霸浏览器的问题
  17. docker安装firefox
  18. 最短路问题——Java语言实现
  19. excel打开文件数字显示E+问题
  20. XP日文输入法IME/文件打包下载

热门文章

  1. 中国女士职业套装行业深度调研及投资前景预测研究报告
  2. Java压力测试工具--Apache JMeter的安装与使用
  3. 好学易懂 从零开始的插头DP(三)
  4. 在网易云音乐上传视频总结
  5. ubuntu下最优秀的截屏软件scrot
  6. win10浏览器加载很慢_Win10 Edge浏览器打开缓慢如何提高加载速度
  7. Android答题 通过RecyclerView显示题目和选项并提交答案
  8. 【科技百咖】博思廷王巍:真正做好“视频监控+AI”这道菜
  9. 跳台阶以及变态跳台阶问题
  10. 关于JS对象转换为字符串的实现