在有些手機(vivo)通過以下方法獲取android手機的imei會返回一串英文:
public static String getDeviceIMEI(Context ctx) {
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
if (tm != null && ActivityCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
return tm.getDeviceId();
} else {
return "";
}
}
改用反射的反射,ok
/**
*slotId 卡槽
*/
public static String getIMEI(Context context, int slotId) {
try {
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Method method = manager.getClass().getMethod("getImei", int.class);
String imei = (String) method.invoke(manager, slotId);
return imei;
} catch (Exception e) {
return "";
}
}
注意添加權限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />