android-TelephonyManager.getDeviceId(0)返回不同的结果
作者:互联网
由于某些特定原因,我需要在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();
}
在大多数情况下,它都能正常工作.但是,某些设备(例如Huawei Honor 7)提供双卡功能.在设置中,用户可以在两张支持3G / 4G的SIM卡之间进行切换.
当我有两个SIM卡并且执行该切换时,我得到的IMEI是不同的.
据我所知,IMEI与物理插槽有关,不应更改.从构造函数看,这似乎是不好的实现.
有解决方法的主意吗?
解决方法:
正如您所说,IMEI /设备ID已标记为sim插槽.
对于双SIM卡手机,有三个IMEI值(每个插槽一个)和IMEI-SV.
假设广告位1的IMEI为:123456789012345
插槽2的IMEI为:012500123456789
根据情况,以下是telephonyManagerObj.getDeviceId()返回的值:
>如果您没有任何SIM卡,则该方法将返回插槽1的IMEI,即123456789012345
>如果插槽1中有SIM卡,则该方法将返回插槽1的IMEI,即123456789012345
>如果两个插槽中都装有SIM卡,则该方法将返回插槽1的IMEI,即123456789012345
>但是,如果仅插槽2中有SIM卡,则该方法将返回插槽2的IMEI,即012500123456789
>我发现在一台设备上,当我将SIM卡错误地插入插槽1时,该方法返回了IMEI-SV
保持一致性的一种解决方法是,一旦成功设法将IMEI存储在SharedPreference / Sqlite中.
因此,当您在代码中需要IMEI值时,可以首先检查它在本地存储中是否可用.如果不可用,则检索IMEI并将其存储以备下次使用.
请注意,Android O已弃用getDeviceId().请检查this so,以备不时之需
标签:android,huawei,imei 来源: https://codeday.me/bug/20191013/1904736.html