当前位置: 代码迷 >> Android >> 当前已知最牛逼的获取安卓手机双IMEI的代码,包括山寨机
  详细解决方案

当前已知最牛逼的获取安卓手机双IMEI的代码,包括山寨机

热度:76   发布时间:2016-04-28 04:28:15.0
目前已知最牛逼的获取安卓手机双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;        }    } }

?

?