获取双卡的IMEI,IMSI

  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 }  

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

posted @ 2016-09-13 10:18  黑炭BC  阅读(595)  评论(0)    收藏  举报