您的位置:首页 > 移动开发 > Android开发

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

2013-11-12 19:44 435 查看
public static String getImsi(Context context) {
String imsi = "";
try {   //普通方法获取imsi
TelephonyManager 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卡 一般需利用反射来获取
不同芯片的手机底层的方法也不一样
可能经过深度定制的手机无法获取到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息