我正在创建一个应用程序,该应用程序将根据您的移动网络提供商所在的国家/地区显示该国家/地区所有其他移动网络提供商的列表。为此,我使用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/

10-10 04:54