其他分享
首页 > 其他分享> > android-TelephonyManager.getDeviceId(0)返回不同的结果

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