2017-08-13 2 views
0

私のAndroidアプリでは、特定の機能を判断するために、getSimCountryIso()getNetworkCountryIso()を使って端末のISO国コードを確認しています。 私の実際のモバイルデバイスとエミュレータでこれをテストし、すべてのエラーを返さずに特定の値を返しました。AndroidタブレットでgetSimCountryIso()が呼び出されるとどうなりますか?

私の毎日のドライバーフォンにはSIMカードが入っていますが、他にはSIMカードがありません。最初に、私はgetSimCountryIso()getNetworkCountryIso()の両方が常にいくつかの値を返すと思っていましたが、SIMカードを持っていた私の実際のデバイスとエミュレータが実際のものと異なる可能性があるので疑いがあります。

のSIMカードがのもので、WiFi接続のみしか持たない本物のタブレットでは、何が起こるのだろうかと思います。私はいつも一定の価値を期待できますか?または例外またはnull?

答えて

1

NullPointerExceptionが発生するとは思っていましたが、Nougatを実行しているPixel C - 実際にはTelephonyManager.getSimCountryIso()TelephonyManager.getNetworkCountryIso()の空の文字列が返されました。

タブレットのPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)を呼び出すと、falseが返されるため、結果はNPEになると想定していました。これは、電話以外のデバイスでこのようにSIMまたはネットワークの国コードを取得しようとしてはいけないということを教えてくれました。しかし、TelephonyManagerをこのようなデバイスでContext.getSystemService()を使用して取得しようとすると、nullでないTelephonyManagerが得られます。これは、シムまたはネットワークの国を提供するのには役立ちません。

私の意見では、テレフォニーシステム機能を持たないデバイスを扱っている場合は、実際に場所のアクセス許可を侵害したくない場合は、GPSの場所またはユーザー設定のロケールの使用を検討する必要がありますユーザーが設定したロケールがユーザーの所在地ではないことを許容することができます。

+0

お試しいただきありがとうございます。それは多くの助け、私はこれなしでは決して知りません.. – Jenix

+0

参考までに、私はGenymotionのPixel C Nougatエミュレータでテストしました。 PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)がtrueを返し、TelephonyManager.getSimCountryIso()とTelephonyManager.getNetworkCountryIso()の両方が文字列「us」を返しました。再度、あなたの答えは本当に役に立ちます、ありがとう! – Jenix

+0

問題ありません!お役に立てて嬉しいです。あなたのPixel Cがエミュレータのいくつかの設定のためにtrueと "us"を返したのかどうか疑問に思います... Strange ... –

関連する問題