1 import java.util.ArrayList; 2 import java.util.List; 3 4 import android.content.Context; 5 import android.telephony.TelephonyManager; 6 import android.widget.Toast; 7 8 public class getImei { 9 Context context = null; 10 11 public getImei(Context _context) { 12 context = _context; 13 } 14 15 public String getimei() { 16 17 try { 18 19 TelephonyManager tm = (TelephonyManager) context 20 .getSystemService(Context.TELEPHONY_SERVICE); 21 String imei = tm.getDeviceId(); 22 List<String> IMEIS = new ArrayList<String>(); 23 if (checkimei(imei.trim())) { 24 IMEIS.add(imei.trim()); 25 } 26 27 28 try{ 29 TelephonyManager telephonyManager1 = (TelephonyManager)context.getSystemService("phone1"); 30 String imeiphone1= telephonyManager1.getDeviceId(); 31 if (imeiphone1 != null && checkimei(imeiphone1)) { 32 if (!IMEIS.contains(imeiphone1)) { 33 IMEIS.add(imeiphone1); 34 } 35 } 36 } catch (Exception e) { 37 38 } 39 try{ 40 TelephonyManager telephonyManager2 = (TelephonyManager)context.getSystemService("phone2"); 41 String imeiphone2= telephonyManager2.getDeviceId(); 42 if (imeiphone2 != null && checkimei(imeiphone2)) { 43 if (!IMEIS.contains(imeiphone2)) { 44 IMEIS.add(imeiphone2); 45 } 46 } 47 } catch (Exception e) { 48 49 } 50 51 List<String> imeis = IMEI_initQualcommDoubleSim(); 52 if (imeis != null && imeis.size() > 0) { 53 for (String item : imeis) { 54 if (!IMEIS.contains(item)) { 55 IMEIS.add(item); 56 } 57 } 58 } 59 60 imeis = IMEI_initMtkSecondDoubleSim(); 61 if (imeis != null && imeis.size() > 0) { 62 for (String item : imeis) { 63 if (!IMEIS.contains(item)) { 64 IMEIS.add(item); 65 } 66 } 67 } 68 imeis = IMEI_initMtkDoubleSim(); 69 if (imeis != null && imeis.size() > 0) { 70 for (String item : imeis) { 71 if (!IMEIS.contains(item)) { 72 IMEIS.add(item); 73 } 74 } 75 } 76 imeis = IMEI_initSpreadDoubleSim(); 77 if (imeis != null && imeis.size() > 0) { 78 for (String item : imeis) { 79 if (!IMEIS.contains(item)) { 80 IMEIS.add(item); 81 } 82 } 83 } 84 85 StringBuffer IMEI_SB = new StringBuffer(); 86 87 Integer TIMES_TEMP = 1; 88 for (String item : IMEIS) { 89 if (TIMES_TEMP > 1) { 90 IMEI_SB.append('\n'); 91 } 92 IMEI_SB.append(item); 93 // params.put("IMEI" + TIMES_TEMP, item); 94 TIMES_TEMP++; 95 } 96 97 String imeis_tmp = IMEI_SB.toString().trim(); 98 99 100 if ("".equals(imeis_tmp)) { 101 imeis_tmp = "no_imei_1"; 102 } 103 return imeis_tmp; 104 // 105 // TextView_imei.setText(IMEI_SB.toString()); 106 // 107 // WriteFile("imei", IMEI_SB.toString()); 108 109 } catch (Exception e) { 110 Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show(); 111 return "no_imei_2"; 112 } 113 114 } 115 116 private Boolean checkimeisame(String imei) { 117 char firstchar = '0'; 118 if (imei.length() > 0) { 119 firstchar = imei.charAt(0); 120 } 121 Boolean issame = true; 122 for (int i = 0; i < imei.length(); i++) { 123 char ch = imei.charAt(i); 124 if (firstchar != ch) { 125 issame = false; 126 break; 127 } 128 } 129 return issame; 130 // if (issame) { 131 // // 全是相同字符; 132 // } else { 133 // // 包含不同字符 134 // } 135 136 } 137 138 private Boolean checkimei(String IMEI) { 139 Integer LEN = IMEI.length(); 140 if (LEN > 10 && LEN < 20 && !checkimeisame(IMEI.trim())) { 141 return true; 142 } 143 return false; 144 } 145 146 private List<String> IMEI_initMtkDoubleSim() { 147 try { 148 TelephonyManager tm = (TelephonyManager) context 149 .getSystemService(Context.TELEPHONY_SERVICE); 150 Class<?> c = Class.forName("com.android.internal.telephony.Phone"); 151 Integer simId_1, simId_2; 152 try { 153 java.lang.reflect.Field fields1 = c.getField("GEMINI_SIM_1"); 154 fields1.setAccessible(true); 155 simId_1 = (Integer) fields1.get(null); 156 java.lang.reflect.Field fields2 = c.getField("GEMINI_SIM_2"); 157 fields2.setAccessible(true); 158 simId_2 = (Integer) fields2.get(null); 159 } catch (Exception ex) { 160 simId_1 = 0; 161 simId_2 = 1; 162 } 163 164 // java.lang.reflect.Method m = TelephonyManager.class 165 // .getDeclaredMethod("getSubscriberIdGemini", int.class); 166 // String imsi_1 = (String) m.invoke(tm, simId_1); 167 // String imsi_2 = (String) m.invoke(tm, simId_2); 168 169 java.lang.reflect.Method m1 = TelephonyManager.class 170 .getDeclaredMethod("getDeviceIdGemini", int.class); 171 String imei_1 = ((String) m1.invoke(tm, simId_1)).trim(); 172 String imei_2 = ((String) m1.invoke(tm, simId_2)).trim(); 173 174 // java.lang.reflect.Method mx = TelephonyManager.class 175 // .getDeclaredMethod("getPhoneTypeGemini", int.class); 176 // Integer phoneType_1 = (Integer) mx.invoke(tm, simId_1); 177 // Integer phoneType_2 = (Integer) mx.invoke(tm, simId_2); 178 // String defaultImsi = ""; 179 // if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) { 180 // defaultImsi = imsi_2; 181 // } 182 // if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) { 183 // defaultImsi = imsi_1; 184 // } 185 186 List<String> imeis = new ArrayList<String>(); 187 if (checkimei(imei_1)) { 188 imeis.add(imei_1); 189 } 190 if (checkimei(imei_2)) { 191 imeis.add(imei_2); 192 } 193 return imeis; 194 } catch (Exception e) { 195 // ��MTK 196 return null; 197 } 198 199 } 200 201 private List<String> IMEI_initMtkSecondDoubleSim() { 202 try { 203 TelephonyManager tm = (TelephonyManager) context 204 .getSystemService(Context.TELEPHONY_SERVICE); 205 Class<?> c = Class.forName("com.android.internal.telephony.Phone"); 206 207 Integer simId_1, simId_2; 208 try { 209 java.lang.reflect.Field fields1 = c.getField("GEMINI_SIM_1"); 210 fields1.setAccessible(true); 211 simId_1 = (Integer) fields1.get(null); 212 java.lang.reflect.Field fields2 = c.getField("GEMINI_SIM_2"); 213 fields2.setAccessible(true); 214 simId_2 = (Integer) fields2.get(null); 215 } catch (Exception ex) { 216 simId_1 = 0; 217 simId_2 = 1; 218 } 219 220 java.lang.reflect.Method mx = TelephonyManager.class.getMethod( 221 "getDefault", int.class); 222 TelephonyManager tm1 = (TelephonyManager) mx.invoke(tm, simId_1); 223 TelephonyManager tm2 = (TelephonyManager) mx.invoke(tm, simId_2); 224 225 // String imsi_1 = tm1.getSubscriberId(); 226 // String imsi_2 = tm2.getSubscriberId(); 227 228 String imei_1 = (tm1.getDeviceId()).trim(); 229 String imei_2 = (tm2.getDeviceId()).trim(); 230 // 231 // Integer phoneType_1 = tm1.getPhoneType(); 232 // Integer phoneType_2 = tm2.getPhoneType(); 233 // String defaultImsi = ""; 234 // if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) { 235 // defaultImsi = imsi_2; 236 // } 237 // if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) { 238 // defaultImsi = imsi_1; 239 // } 240 241 List<String> imeis = new ArrayList<String>(); 242 if (checkimei(imei_1)) { 243 imeis.add(imei_1); 244 } 245 if (checkimei(imei_2)) { 246 imeis.add(imei_2); 247 } 248 return imeis; 249 250 } catch (Exception e) { 251 return null; 252 } 253 } 254 255 private List<String> IMEI_initSpreadDoubleSim() { 256 try { 257 Class<?> c = Class 258 .forName("com.android.internal.telephony.PhoneFactory"); 259 java.lang.reflect.Method m = c.getMethod("getServiceName", 260 String.class, int.class); 261 String spreadTmService = (String) m.invoke(c, 262 Context.TELEPHONY_SERVICE, 1); 263 264 TelephonyManager tm = (TelephonyManager) context 265 .getSystemService(Context.TELEPHONY_SERVICE); 266 // String imsi_1 = tm.getSubscriberId(); 267 String imei_1 = (tm.getDeviceId()).trim(); 268 // Integer phoneType_1 = tm.getPhoneType(); 269 TelephonyManager tm1 = (TelephonyManager) context 270 .getSystemService(spreadTmService); 271 // String imsi_2 = tm1.getSubscriberId(); 272 String imei_2 = (tm1.getDeviceId()).trim(); 273 // Integer phoneType_2 = tm1.getPhoneType(); 274 // String defaultImsi = ""; 275 // if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) { 276 // defaultImsi = imsi_2; 277 // } 278 // if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) { 279 // defaultImsi = imsi_1; 280 // } 281 282 List<String> imeis = new ArrayList<String>(); 283 if (checkimei(imei_1)) { 284 imeis.add(imei_1); 285 } 286 if (checkimei(imei_2)) { 287 imeis.add(imei_2); 288 } 289 return imeis; 290 291 } catch (Exception e) { 292 return null; 293 } 294 } 295 296 public List<String> IMEI_initQualcommDoubleSim() { 297 try { 298 TelephonyManager tm = (TelephonyManager) context 299 .getSystemService(Context.TELEPHONY_SERVICE); 300 Class<?> cx = Class 301 .forName("android.telephony.MSimTelephonyManager"); 302 Object obj = context.getSystemService("phone_msim"); 303 Integer simId_1 = 0; 304 Integer simId_2 = 1; 305 // 306 // java.lang.reflect.Method mx = cx.getMethod("getDataState"); 307 // // int stateimei_1 = (Integer) mx.invoke(cx.newInstance()); 308 // int stateimei_2 = tm.getDataState(); 309 // java.lang.reflect.Method mde = cx.getMethod("getDefault"); 310 java.lang.reflect.Method md = cx 311 .getMethod("getDeviceId", int.class); 312 // java.lang.reflect.Method ms = cx.getMethod("getSubscriberId", 313 // int.class); 314 // java.lang.reflect.Method mp = cx.getMethod("getPhoneType"); 315 316 // Object obj = mde.invoke(cx); 317 318 String imei_1 = ((String) md.invoke(obj, simId_1)).trim(); 319 String imei_2 = ((String) md.invoke(obj, simId_2)).trim(); 320 321 // String imsi_1 = (String) ms.invoke(obj, simId_1); 322 // String imsi_2 = (String) ms.invoke(obj, simId_2); 323 324 // int statephoneType_1 = tm.getDataState(); 325 // int statephoneType_2 = (Integer) mx.invoke(obj); 326 327 List<String> imeis = new ArrayList<String>(); 328 if (checkimei(imei_1)) { 329 imeis.add(imei_1); 330 } 331 if (checkimei(imei_2)) { 332 imeis.add(imei_2); 333 } 334 return imeis; 335 336 // Log.e("tag", statephoneType_1 + "---" + statephoneType_2); 337 338 // Class<?> msc = Class.forName("android.telephony.MSimSmsManager"); 339 // for (Method m : msc.getMethods()) { 340 // if (m.getName().equals("sendTextMessage")) { 341 // m.getParameterTypes(); 342 // } 343 // Log.e("tag", m.getName()); 344 // } 345 346 } catch (Exception e) { 347 return null; 348 } 349 } 350 351 }