19

私は通常、デバイスの言語から国を取得します。それは機能しますが、今はブラジルを認識しなければなりません。また、ほとんどのデバイスにはポルトガル語(pt_PT)のみがあり、ポルトガル語(Brazil)オプションはありません。

私はこのスレッドをチェックしました:私はどこにいますか?-国を取得

メソッド

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

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

まだ言語のみであり、役に立ちません。

sim-cardに関する提案もありますが、これが確実に機能するかどうかはわかりません(すべてのsimカードにこの一意のIDがありますか?)。また、ユーザーが変更できないため、必要なものとは少し異なります。 (これは設定の場合です)、SIMカードのないデバイスを使用しているユーザーを除外します(おそらくWLANを使用しているだけです)。

ジオロケーションの提案もありますが、これはおそらくそれを非アクティブ化したデバイスでは機能しません。それとも私は間違っていますか?

他に何も役に立たない場合は、ユーザーがそこで選択できるように、アプリでダイアログまたはメニュー設定を行います。ただし、最初に、デバイスに信頼できる可能性があるかどうかを確認したいと思います。

4

5 に答える 5

33

あなたは電話ネットワークから場所を引き出すことができます:

TelephonyManager.getNetworkCountryIso()

またはSIMカードから

TelephonyManager.getSimCountryIso()

または、ユーザーの電話番号をお持ちの場合は、このデータを使用して国と照合できる場合があります。

理想的には、これら3つすべて(SIM、電話番号、ネットワークの順で)を使用でき、どれも機能しない場合は、最後の手段として逆ジオロケーションを使用します。

于 2012-08-08T20:23:28.527 に答える
7

これを試して:

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

これで、このWikipediaエントリcountryISOCodeのISO3166国コードに類似した次のいずれかが含まれます。

于 2012-08-08T20:38:58.377 に答える
1

ジオロケーションは最も効果的で邪魔にならないでしょう。いつでもジオロケーションを使用できます。ユーザーがジオロケーションを無効にしている場合は、国を尋ねるダイアログを表示します。情報についてユーザーにバグを与えることが少なければ少ないほどよい。

于 2012-08-08T20:23:52.247 に答える
1
TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.getNetworkCountryIso();

エリックが答えたように、上記のコードが最良のアプローチです。また、注目に値するのは、

mTelephonyManager.getSimCountryIso()

デバイスの現在の場所(国)ではなく、SIMプロバイダーの母国(たとえば、A Vodaphone UK SIMは「gb」を返し、A Vodaphone Germany SIMは「de」を返します)を示すため、使用しないでください。この違いは、ユーザーがローミングしているときに重要です。

于 2015-05-18T20:09:50.660 に答える
-1

それは私に取り組んでいます。

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();
    }

...............................。

于 2017-12-12T22:32:30.057 に答える