我是靠谱客的博主 朴素白猫,最近开发中收集的这篇文章主要介绍目前已知最牛逼的获取安卓手机双IMEI的代码,包括山寨机,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

来自于: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;
}
}
}

 

 

最后

以上就是朴素白猫为你收集整理的目前已知最牛逼的获取安卓手机双IMEI的代码,包括山寨机的全部内容,希望文章能够帮你解决目前已知最牛逼的获取安卓手机双IMEI的代码,包括山寨机所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部