android-TelephonyManager.getDeviceId(0)返回不同的结果

android-TelephonyManager.getDeviceId(0)返回不同的结果,第1张

概述由于某些特定原因,我需要在Android应用程序中获取IMEI.这是我使用的代码:TelephonyManagertm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.M){//APIavailableonly>=

由于某些特定原因,我需要在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-TelephonyManager.getDeviceId(0)返回不同的结果全部内容,希望文章能够帮你解决android-TelephonyManager.getDeviceId(0)返回不同的结果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1093554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存