10

このエラーは何ですか?私はAndroid 4 +のみを取得しており、以下では取得していません:

E/AndroidRuntime(891): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.getaddress/com.example.getaddress.MainActivity}: java.lang.IllegalArgumentException: requested provider network doesn't exisit

4

1 に答える 1

24

NETWORK_PROVIDER ロケーション プロバイダーは、 Google API を使用しないAndroid 4 以降のエミュレーターではアクセスできないようです(実際には、すべてのエミュレーターでテストしたわけではありません。以下を参照してください)。私がテストした実際のデバイスはそれで問題ありません (ただし、それらはすべて Google サービスを搭載しています。カスタムのクリーンな Android バージョン、おそらく Kindle でテストするのは興味深いでしょう)。

デバイス設定でプロバイダーを有効/無効にすることは問題ではありません。エミュレーターにはありません。

症状

基本的にこのコード:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,mLocListener);

次の例外が発生します。

java.lang.IllegalArgumentException: provider doesn't exisit: null

すべての Android 4+ ネイキッド エミュレーター (Google バインド エミュレーターとは対照的に)

注: 「exisit」のタイプミスは実際のログ行にあります。

診断

次を使用して、ターゲット デバイス上のすべてのロケーション プロバイダーのリストを取得します。

List<String> providers = locationManager.getAllProviders();

ネットワークプロバイダーが存在することがわかります

  • 物理デバイス
  • Android 2.3.3 エミュレーター (Google API なし)
  • Android レベル 17 (4.2) エミュレーター (Google API を使用)

しかし、オンではありません

  • Google API を使用した Android レベル 15 (4.0.3) エミュレーター
  • Android 4.2 エミュレーター (Google API なし)

私の推測では、非技術的な理由で、Google は AOSP でのネットワークロケーション サービスを許可しておらず、その使用を 4.2 (?) から Google にバインドされた OS のバージョンに制限しています。

Google 以外のデバイス (Kindle など) に代わりのネットワーク ロケーション サービスがあるかどうかはわかりません。

アプリへの影響の可能性

これがほとんどのスマートフォンやタブレットに影響を与えるとは思わない. しかし、それはできます

  • あなたのテスト能力をいくらか損なう
  • Androidのカスタム/Google以外のバージョンを使用するユーザーの互換性の問題です(これもKindleですか?)

検出方法

次のような簡単なテスト:

locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER)

ネットワークプロバイダーがデバイスに存在するかどうかを簡単に知ることができます。存在するが、ユーザーがアクティブ化していない場合、LocationListener はロケーション リクエストに続いてonProviderDisabledコールバックを受け取ることに注意してください。

于 2012-12-13T00:57:16.270 に答える