TelephonyManager.getDeviceId(0) returns 个不同的结果
TelephonyManager.getDeviceId(0) returns different results
出于某些特定原因,我需要在我的 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();
}
在大多数情况下它工作正常。然而,某些设备(如华为荣耀 7)提供双卡功能。在设置中,用户可以在两张 SIM 卡之间切换以支持 3G/4G。
当我有两张 SIM 卡并进行切换时,我得到的 IMEI 不同。
据我所知,IMEI 与物理插槽有关,不应更改。这看起来像是构造函数的错误实现。
有解决方法吗?
如你所说IMEI/Device id 被标记到 sim 插槽。
对于双 SIM 卡手机,有三个 IMEI 值(每个插槽一个)和 IMEI-SV。
假设插槽 1 的 IMEI 是:123456789012345
插槽 2 的 IMEI 为:012500123456789
根据不同的情况,以下是 telephonyManagerObj.getDeviceId() 的 returned 值:
- 当您没有任何 SIM 卡时,该方法将为插槽 1 return IMEI,即 123456789012345
- 当插槽 1 中有 SIM 卡时,该方法将为插槽 1 return IMEI,即 123456789012345
- 当您在两个插槽中都有 SIM 卡时,该方法将为插槽 1 return IMEI,即 123456789012345
- 但是当你的 SIM 卡只在插槽 2 时,该方法将 return 插槽 2 的 IMEI 即 012500123456789
- 我发现在一台设备上,当我将 SIM 卡错误地插入插槽 1 时,方法 returned IMEI-SV
保持一致性的一种解决方法是在成功检索到 IMEI 后将其存储在 SharedPreference/Sqlite 中。
因此,当您在代码中需要 IMEI 值时,您可以首先检查它是否在您的本地存储中可用。如果不可用,则检索 IMEI 并将其存储以供下次使用。
小心,getDeviceId() has been deprecated in Android O. Check this so备选
出于某些特定原因,我需要在我的 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();
}
在大多数情况下它工作正常。然而,某些设备(如华为荣耀 7)提供双卡功能。在设置中,用户可以在两张 SIM 卡之间切换以支持 3G/4G。
当我有两张 SIM 卡并进行切换时,我得到的 IMEI 不同。
据我所知,IMEI 与物理插槽有关,不应更改。这看起来像是构造函数的错误实现。
有解决方法吗?
如你所说IMEI/Device id 被标记到 sim 插槽。
对于双 SIM 卡手机,有三个 IMEI 值(每个插槽一个)和 IMEI-SV。
假设插槽 1 的 IMEI 是:123456789012345
插槽 2 的 IMEI 为:012500123456789
根据不同的情况,以下是 telephonyManagerObj.getDeviceId() 的 returned 值:
- 当您没有任何 SIM 卡时,该方法将为插槽 1 return IMEI,即 123456789012345
- 当插槽 1 中有 SIM 卡时,该方法将为插槽 1 return IMEI,即 123456789012345
- 当您在两个插槽中都有 SIM 卡时,该方法将为插槽 1 return IMEI,即 123456789012345
- 但是当你的 SIM 卡只在插槽 2 时,该方法将 return 插槽 2 的 IMEI 即 012500123456789
- 我发现在一台设备上,当我将 SIM 卡错误地插入插槽 1 时,方法 returned IMEI-SV
保持一致性的一种解决方法是在成功检索到 IMEI 后将其存储在 SharedPreference/Sqlite 中。
因此,当您在代码中需要 IMEI 值时,您可以首先检查它是否在您的本地存储中可用。如果不可用,则检索 IMEI 并将其存储以供下次使用。
小心,getDeviceId() has been deprecated in Android O. Check this so备选