2013-01-06 25 views
0

哪個國家我目前正在在做這樣的事情的最可靠的方法:Android的 - 什麼是確定用戶在

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

但我不知道所有的國家是否遵守本和getSimCountryIso ();功能適用於所有手機。這是可靠的100%還是99%...或者是另一種告訴用戶來自哪裏的更可靠的方法?

謝謝!

+1

如果用戶不在他的國家/地區,該怎麼辦? –

回答

4

最準確的方法是首先得到LocationManager。然後,致電LocationManager.getLastKnownPosition。然後,創建一個GeoCoder並致電GeoCoder.getFromLocation。這是一個單獨的線程!這會給你一個Address對象的列表。打電話Address.getCountryName,你明白了。

請記住,最後一個已知位置可能有點陳舊,所以如果用戶剛剛越過邊界,您可能暫時不會了解它。

如果用戶使用國際漫遊,您當前使用的SIM卡方法將返回錯誤的國家/地區。

另一種方法是使用用戶區域設置:

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

但是,這將返回基於語言首選項的國家,對於不具有在區域的地方會不準確Android(例如,在瑞士的用戶可能會將語言設置爲德語或法語,導致國家不正確。

+0

謝謝 - 我對國際漫遊不是正確的,我只是擔心如果這個人在他們的國家,我發佈的方法是否可靠很多潛在的領域沒有設置? – Genadinik

+0

我99%確定每張SIM卡都會設置該字段。但是,如果未設置,如果用戶連接到網絡,TelephonyManager.getNetworkCountryIso()'肯定會工作,並且可以用作回退。 –

+0

謝謝:)這非常有幫助。 – Genadinik

相關問題