来自于: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) { // ��MTK return 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; } } }
相关推荐
本项目提供的压缩包“安卓端设计计算器代码”包含了完成这一任务所需的所有源码,使得开发者能够直接导入到安卓开发环境中进行编译和运行。下面我们将详细探讨这些知识点。 1. **安卓开发环境**:首先,你需要一个...
在Android系统中,基站定位是一种常见的位置获取方式,尤其在GPS信号不佳或者无法获取GPS卫星信号的情况下,基站定位成为手机定位的重要补充。本教程将详细讲解如何在Android应用中实现基站定位功能。 基站定位原理...
《Android手机安全卫士工程源代码解析》 在Android操作系统占据全球智能手机市场主导地位的今天,手机安全问题显得尤为重要。Android手机安全卫士是保护用户设备免受恶意软件、病毒和隐私泄露等威胁的重要工具。...
它可以包含预设的IMEI和UIN,或者一个已知的EnMicroMsg.db文件,以便用户比较脚本的输出结果。 最后,“.metadata”文件通常是开发环境或版本控制系统留下的元数据,可能包含了关于项目的信息,如编译设置、版本...
这个"判断android手机是华为小米魅族系统"的工具类就是针对这种情况设计的,它可以帮助开发者识别用户设备是属于华为、小米还是魅族等品牌。这个类通常会包含一系列方法,用于检测设备的制造商信息,从而确定其所属...
【Android应用源码安卓手机安全卫士更新版.zip】是一个包含Android应用源代码的压缩文件,主要用于学习和研究Android应用程序的开发与安全防护。在这个更新版本中,开发者可能对原有的安全卫士应用进行了功能增强、...
本教程将详细讲解如何在Android 6.0及以上版本中兼容地获取手机敏感信息。 首先,我们需要了解Android的权限管理模型。在Android 6.0之前,应用在安装时会一次性获取所有所需权限。但这种模式可能导致用户无法明确...
在Android开发中,获取手机当前位置是一项常见的需求,这通常涉及到设备的定位服务。本文将详细介绍如何在Android应用中实现这一功能,以及两种主要的定位方法:GPS定位和网络定位。 1. GPS定位: GPS(全球定位...
在Android系统中,获取地理位置信息是开发者经常遇到的需求。标题提到的“基于基站,APN,GPS,WiFi,Network 根据不同手机SIM卡获取经纬度”涉及了多种定位技术,每种都有其特性和应用场景。下面将详细介绍这些技术...
在安卓操作系统中,手机的许多隐秘参数通常不为普通用户所知,这些参数包括硬件信息、系统版本、内核版本、设备ID等。本文将详细介绍如何使用安卓手机软件来查看这些隐藏的设备参数,帮助用户更好地理解自己的手机并...
【安卓手机安全卫士更新版源码解析】 在移动设备领域,尤其是安卓系统,安全问题一直备受关注。安卓手机安全卫士更新版源码提供了一种解决方案,它可以帮助用户保护设备免受恶意软件、病毒和其他潜在威胁的侵害。...
总结来说,Android获取设备唯一ID有多种途径,包括IMEI、Android_ID、Serial Number以及自定义UUID方案。每种方式都有其适用范围和局限性,开发者应根据具体需求选择合适的方法,并注意处理各种可能的异常情况,以...
本文以占据了移动操作系统市场较高比例的Android手机为例,深入介绍了Android手机的安全机制,并详细解释了恶意代码程序的设计和操作机制。最后,提出了如何在日常使用手机过程中避免恶意代码侵害的建议。 Android...
在Android平台上实现手机连接蓝牙打印机并进行打印功能是一项常见的需求,尤其在移动办公、零售等领域。这个场景中,我们主要涉及的技术点包括Android系统的蓝牙API、数据传输以及打印协议的理解。 首先,Android...
在C#编程环境中,通过已知的窗口句柄来获取窗口标题是一项常用且实用的功能,尤其是在进行自动化测试、用户界面操作或系统监控等任务时。本文将详细介绍如何使用C#来实现这一功能,并深入探讨其背后的原理和技术细节...
在安卓手机系统中,Wi-Fi补丁是一种用于修复或优化无线网络连接的程序代码,它主要针对特定的Wi-Fi问题,如连接不稳定、信号弱、掉线频繁等。本资源包"安卓手机WIFI补丁集合"包含了针对这些问题的解决方案,帮助用户...
IMEI码通常由15位数字组成,分为几个部分,包括制造商代码、型号核准代码、序列号以及检查码。在给定的“批量5000条IMEI计算”主题中,我们将深入探讨IMEI的结构、生成原理以及如何通过已知的前14位来计算后续记录。...
为了保护用户的设备和个人数据,Android手机防病毒软件的开发显得尤为重要。本源码着重实现了一键扫描功能,通过对应用权限和数字特征签名的分析,来检测并预防可能存在的恶意程序。 一、应用权限扫描 在Android...
基于Android平台的手机恶意代码检测与防护技术研究 在当今智能手机时代,Android平台已经成为全球最流行的手机操作系统之一。然而,随着手机功能的日益丰富和网络环境的复杂化,手机恶意代码问题也日益严重。恶意...
本文主要探讨的是基于Android系统的手机恶意代码的检测与防护技术。随着移动通信和智能终端的快速发展,Android因其开源特性,吸引了大量的开发者,同时也导致了恶意代码的滋生。这些恶意代码可能威胁到用户的个人...