android 获取手机IMSI码 双卡双待手机

来源:互联网 发布:淘宝神笔编辑器 编辑:程序博客网 时间:2024/04/27 21:31
public static String getImsi(Context context) {String imsi = "";try {   //普通方法获取imsiTelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);imsi = tm.getSubscriberId();if (imsi==null || "".equals(imsi)) imsi = tm.getSimOperator();Class<?>[] resources = new Class<?>[] {int.class};Integer resourcesId = new Integer(1);if (imsi==null || "".equals(imsi)) {try {   //利用反射获取    MTK手机Method addMethod = tm.getClass().getDeclaredMethod("getSubscriberIdGemini", resources);addMethod.setAccessible(true);imsi = (String) addMethod.invoke(tm, resourcesId);} catch (Exception e) {imsi = null;}}if (imsi==null || "".equals(imsi)) {try {   //利用反射获取    展讯手机Class<?> c = Class.forName("com.android.internal.telephony.PhoneFactory");Method m = c.getMethod("getServiceName", String.class, int.class);String spreadTmService = (String) m.invoke(c, Context.TELEPHONY_SERVICE, 1);TelephonyManager tm1 = (TelephonyManager) context.getSystemService(spreadTmService);imsi = tm1.getSubscriberId();} catch (Exception e) {imsi = null;}}if (imsi==null || "".equals(imsi)) {try {   //利用反射获取    高通手机Method addMethod2 = tm.getClass().getDeclaredMethod("getSimSerialNumber", resources);addMethod2.setAccessible(true);imsi = (String) addMethod2.invoke(tm, resourcesId);} catch (Exception e) {imsi = null;}}if (imsi==null || "".equals(imsi)) {imsi = "000000";}return imsi;} catch (Exception e) {return "000000";}}此方法一般都能够获取到IMSI   无高通手机没有亲测MTK 和展讯手机亲测可行一般放在卡1的SIM卡 普通方法即可获取卡2的SIM卡 一般需利用反射来获取不同芯片的手机底层的方法也不一样可能经过深度定制的手机无法获取到

原创粉丝点击