由于某些特定原因,我需要在我的Android应用中的某个时刻获取IMEI。这是我使用的代码:
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
// API available only >= 6.0
// Get first slot to avoid issue if we have multiple sim cards
String imei = tm.getDeviceId(0);
}
else
{
String imei = tm.getDeviceId();
}
在大多数情况下都可以正常工作。然而,一些设备(如华为Honor 7)提供双SIM卡功能。在设置中,用户可以在两张SIM卡之间切换以获得3G / 4G支持。
当我有两张SIM卡并进行切换时,我得到的IMEI就不同了。
据我所知,IMEI与物理插槽有关,不应更改。这看起来像是构造函数的错误实现。
有任何解决方法吗?
答案 0 :(得分:1)
正如您所说,IMEI /设备ID被标记为SIM卡插槽。
对于双SIM卡电话,有三个IMEI值(每个插槽一个)和IMEI-SV。
我们说插槽1的IMEI是:123456789012345
插槽2的IMEI是:012500123456789
取决于方案,以下是telephonyManagerObj.getDeviceId()返回的值:
保持一致性的一个方法是在成功设法检索IMEI后将其存储在SharedPreference / Sqlite中。
因此,当您在代码中需要IMEI值时,您可以先检查它是否在本地存储中可用。如果不可用,则检索IMEI并将其存储以供下次使用。
请注意,Android O中已弃用getDeviceId()。请检查this so以获取替代