我正在创建一个应用程序,该应用程序将根据您的移动网络提供商所在的国家/地区显示该国家/地区所有其他移动网络提供商的列表。为此,我使用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;
您可以在此处找到“我的客户中心”列表MccTable.java
例如,西类牙为214,法国为208
对于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()行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26971806/