4

WI-FIプロバイダーの場所が変更されたイベントリスナーで何が起こったのか誰かが知っていますか?私はこれについて多くの質問を見ましたが、適切な答えはありませんでした。

私はすべてうまくやっていて、古いバージョンのandroidで動作していますが、SAMSUNG GALAXY TAB 10.1をICSに更新したところ、動作しなくなりました。たぶん、これは彼らがICSにUIを実装したときのSAMSUNG(または私のモバイルプロバイダー)のバグです...

私はこのようにeventlistenerを登録しています(以前のバージョンのAndroidでうまく機能し、設定ですべての位置情報サービスも有効にしたことを覚えておいてください):

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, loclistener); //refresh time and distance are to 0 so it should trigger location change event

このリクエストの後、ネットワークプロバイダーが有効になっているかどうかを確認しましたが、そのように表示されます。

コード:

if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
   Toast.makeText(this, "NETWORK PROVIDER enabled!", Toast.LENGTH_LONG).show();
   }

誰かがアイデアを持っているなら私を助けてください...

4

4 に答える 4

4

これは既知の問題です:

デバイスの再起動後、ネットワーク ロケーション プロバイダーは正常に動作しますが、しばらくすると更新が停止します。

https://code.google.com/p/android/issues/detail?id=57707

残念ながら、まだ解決策はありません。

于 2013-10-03T09:11:11.793 に答える
1

で同じ問題が発生しましたNETWORK_PROVIDER。その理由は、更新をリクエストするときに、NETWORK_PROVIDER がメソッドのコールバックを作成しないためonLocationChanged()です。getLastKnownLocation(NETWORK_PROVIDER)また、場所の更新を開始するには、電話する必要があります。

奇妙なことに、GPS_PROVIDERこれは必要ありません。

これが役立つことを願っています。

于 2014-10-29T14:15:33.127 に答える
1

ネットワーク プロバイダーの更新頻度を追跡するために、onLocationChanged() メソッドを次のように変更しました。

public void onLocationChanged(Location location) {      
    dummyText.setText(location.toString() + "\n" + "Elapsed Time (ms): " + (lastTime - location.getTime()));
    lastTime = location.getTime();
}

そして追加しました:

long lastTime = 0;

...グローバル変数として。

これにより、更新間の時間がミリ秒単位で出力されます (最初の修正後 - 最初の修正では、最初の場所からの負の時間値が出力されます)。

上記のコードを Samsung Galaxy S3 で実行したところ、ネットワーク プロバイダーは約 20 秒ごとに更新されるため、コードは問題ないようです。

また、これを WiFi 上の Samsung Dart (T-mobile から、ただし有効化されていない) でも実行しました。ネットワーク プロバイダーは約 45 秒ごとに更新されます。

また、これを WiFi 上の Samsung Nexus S 4G (Sprint からのものですが、アクティブ化されていません) でも実行しましたが、最初はネットワーク プロバイダーがまったく更新されませんでした。デバイスを再起動すると問題が解決したようで、現在は約 20 秒ごとに更新されています。

あなたのコメントと私の経験に基づくと、この問題は OEM 間、さらには同じ OEM のデバイス モデル間でも異なるようです。これは、Android Jelly Bean 4.1 より前の LocationListener の動作が厳密に適用されていないことのもう 1 つの癖かもしれません。LocationListener 動作の厳密な適用は、Android Jelly Bean 4.1 で最近開始されたばかりです。これは、最初の requestLocationUpdates メソッド シグネチャの下にある Android 開発者向けドキュメントで言及されています。

http://developer.android.com/reference/android/location/LocationManager.html

Jellybean より前は、minTime パラメーターは単なるヒントであり、一部のロケーション プロバイダーの実装では無視されていました。Jellybean 以降では、Android 互換デバイスで minTime パラメーターと minDistance パラメーターの両方を監視することが必須です。

また、私の経験から、更新を行うデバイスでの NETWORK_PROVIDER 位置更新の更新間隔は、さまざまなデバイスで約 20 ~ 30 秒にかなり固定されています。そのため、locationManager.requestLocationUpdates() メソッドに渡す minTime パラメータは無視される可能性があります。

ネットワーク プロバイダの場所を取得するためにデバイスを再起動する必要があるのは、この場所情報を提供する Google サーバーからの応答が得られないことが原因である可能性があります。再起動すると直る理由がわかりません。

于 2012-12-19T16:05:29.043 に答える
0

Ok。だから今、私はそれを働かせました。本当に奇妙です。すべてのデバイスを再起動したところ、更新されました。何が起こったのかわかりません。この奇妙な動作の理由を知りたいです。@barbeau さん、いつもご協力ありがとうございます。

于 2012-12-20T06:02:19.337 に答える