0

私は現在、次のようなことをすることを検討しています:

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

しかし、すべての国がこれと getSimCountryIso(); に準拠しているかどうかはわかりません。関数はすべての電話で機能します。これは信頼できる 100% か 99% か ... または、ユーザーの出身地をより信頼できる別の方法で確認できますか?

ありがとう!

4

1 に答える 1

4

最も正確な方法は、最初に を取得することLocationManagerです。次に、 を呼び出しますLocationManager.getLastKnownPosition。次に、GeoCoder を作成して を呼び出しますGeoCoder.getFromLocation。これは別のスレッドです!! これにより、オブジェクトのリストが表示されAddressます。電話Address.getCountryNameして、あなたはそれを得ました。

最後の既知の位置は少し古くなっている可能性があることに注意してください。そのため、ユーザーが国境を越えたばかりの場合、しばらくの間はわからない可能性があります。

現在使用している SIM カードの方法では、ユーザーが国際ローミングを使用している場合、間違った国が返されます。

もう 1 つの方法は、ユーザーのロケールを使用することです。

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

ただし、これは言語設定に基づいて国を返し、Android にロケールがない場所では正確ではありません (たとえば、スイスのユーザーは言語をドイツ語またはフランス語に設定している可能性が高く、結果として間違った国で。

于 2013-01-06T14:19:19.867 に答える