官方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()行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)