由于某些特定原因,我需要在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)返回不同的结果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)