可靠的方法来获得国家的用户在?(Reliable method to get the country

2019-06-26 21:02发布

我通常从设备的语言获得的国家。 它的工作原理,但现在我不得不承认巴西。 和大多数的设备只有葡萄牙语(PT_PT),并没有葡萄牙语(巴西)选项。

我检查这个线程: 我在哪里? -获取国家

方法

 String locale = context.getResources().getConfiguration().locale.getCountry();

 String locale = context.getResources().getConfiguration().locale.getDisplayCountry();

仍然是语言而已,于事无补。

还有,也与SIM卡的建议,但我不知道这是否会可靠地工作(做所有的SIM卡有这种独特的识别?),这也有点不正是我需要的,因为用户不能改变它(这是情况下,如果它是一个设置),它会使用设备,而无需SIM卡(也许他们只是用WLAN)排除用户。

还有地理位置的建议,但是这可能不会工作,已停用它的设备。 还是我错了?

如果没有别的帮助我会做一个对话框或菜单设置我的应用程序,使用户可以有选择它。 不过,我想先确认是否有与该设备的任何可靠的可能性。

Answer 1:

你可以拉的位置从手机网络 :

TelephonyManager.getNetworkCountryIso()

或从SIM卡 :

TelephonyManager.getSimCountryIso()

或者,如果你有用户的电话号码 ,你可以通过匹配到国家这一数据 。

理想情况下,你可以使用所有这三个(以某种顺序,也许SIM,电话号码,然后网络),如果没有工作,利用反向地理位置作为最后的手段。



Answer 2:

试试这个:

 TelephonyManager teleMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
 if (teleMgr != null){
     countryISOCode = teleMgr.getSimCountryIso();
 }

现在, countryISOCode将包含以下类似ISO 3166国家代码按本维基百科的一个入口 。



Answer 3:

地理位置将是最有效和最不显眼。 你总是可以使用地理定位,如果用户有它禁用显示问你的对话为自己的国家。 越少,你的错误,用户对信息的更好。



Answer 4:

TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.getNetworkCountryIso();

作为回答由Eric,上面的代码是最好的办法。 还值得一提的是,

mTelephonyManager.getSimCountryIso()

不应该使用,因为这将表明SIM卡供应商所在国的设备(如沃达丰英国SIM将返回“国标”,A沃达丰德国SIM将返回“德”),而不是当前位置(国家或地区)。 当用户漫游到这种差异是显著。



Answer 5:

它的工作对我。

String countryISOCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TelephonyManager teleMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    if (teleMgr != null){
        countryISOCode = teleMgr.getSimCountryIso();
    }

............................



文章来源: Reliable method to get the country the user is in?