android – 意外的telephonyManager.getSimCountryIso()行为

android – 意外的telephonyManager.getSimCountryIso()行为,第1张

概述我正在创建一个应用程序,具体取决于您的移动网络提供商所在的国家/地区,显示来自同一国家/地区的所有其他移动网络提供商的列表.为此,我使用 telephonyManager.getSimCountryIso()检索国家/地区代码. 官方Android开发人员文档说:“返回SIM提供商的国家代码等同的ISO国家代码”,因此我希望国家代码始终与设备位置无关.但那不是它的实际效果! 例如,我最近遇到过这种 我正在创建一个应用程序,具体取决于您的移动网络提供商所在的国家/地区,显示来自同一国家/地区的所有其他移动网络提供商的列表.为此,我使用 telephonyManager.getSimCountryIso()检索国家/地区代码.

官方AndroID开发人员文档说:“返回SIM提供商的国家代码等同的ISO国家代码”,因此我希望国家代码始终与设备位置无关.但那不是它的实际效果!
例如,我最近遇到过这种情况:
我有一个来自西班牙的SIM卡的AndroID设备属于西班牙网络提供商.因此,如果我在西班牙,telephonyManager.getSimCountryIso()将返回“es”.到目前为止一切正常.问题是当我前往法国时,例如我调试应用程序并找出telephonyManager.getSimCountryIso()返回国家代码:“nl”(来自荷兰!?我在法国漫游,但使用相同的西班牙语SIM卡!).我使用与西班牙相同的设备和相同的SIM卡,所以国家代码ISO应该仍然是“es”.

我的问题是这种方法实际上如何运作?如果我使用西班牙语SIM卡,为什么我会收到国家代码“nl”(荷兰)?

在此先感谢您的帮助

解决方法 您可以使用MCC MNC获取SIM卡国家/地区,它是SIM配置的,与您所在的网络无关.

Configuration config = getResources().getConfiguration();int countryCode = config.mcc;

您可以在此处找到MCC列表MccTable.java

例如,西班牙是214,法国是208

MCC should work on all GSM devices with SIM card but it is unreliable on CDMA networks

对于CDMA设备,我找到了following solution

if (telephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {    Class<?> c = Class.forname("androID.os.SystemPropertIEs");    Method get = c.getmethod("get",String.class);    // Gives MCC + MNC    String homeOperator = ((String) get.invoke(c,"ro.cdma.home.operator.numeric"));     String country = homeOperator.substring(0,3); // the last three digits is MNC } else {    Configuration config = getResources().getConfiguration();    int countryCode = config.mcc;}
总结

以上是内存溢出为你收集整理的android – 意外的telephonyManager.getSimCountryIso()行为全部内容,希望文章能够帮你解决android – 意外的telephonyManager.getSimCountryIso()行为所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存