web-dev-qa-db-ja.com

NETWORK_PROVIDERは更新された場所を提供していません

LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVICE); //getApp() returns my Application object
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);

それが私が聞くために使用しているコードです。 GPSを有効にすると、すべてが正常に機能します。ただし、GPSを無効にしてネットワークの場所に依存すると、古い結果が得られます。この場合、2日前からです。更新できません。 getLastKnownLocationを呼び出すと、同じ古い結果が返されます。

Google Mapsは問題なく更新されているので、ハードウェア/システム構成の問題ではないことを知っています。

私はグーグルで調べてみたところ、同様の問題を抱えているが答えが見つからない人を数人見つけました。私は、プロジェクトをAPIレベル8(2.2)と15(4.0.3)にターゲット化しようとしました。同じ結果。電話でICSを実行しています。

また、すべてのリクエストをgetAllProviders()に含めるだけでなく、GPS_PROVIDERのリクエストも削除しようとしました。同じ取引。

NETWORK_PROVIDERが更新されない理由は何ですか?どんな助けも大歓迎です。

(P.S.いいえ、通常は時間/距離パラメーターとして「1、1」を使用しません。これをデバッグ中に変更しました。)

編集:はい、isProviderEnabled()がtrueを返すことを忘れていました。

48
hersh

私はついにこの問題を解決する方法を見つけました( 私の質問 を参照)。

私のS3 Galaxy Miniの場合、上記と同様の症状(再起動するまで位置情報が更新されません...)がありました。ほとんどの場合、場所はデバイスが低電力状態になったときに更新を停止しましたが、電話が完全に充電されていてもたまに発生しただけでした。明らかに、これはLocationManagerのどこかの問題です。場所(LocationManagerクラス)に新しいGoogle Play Services APIを使用して、LocationClientをバイパスすることができました。

これはおそらく、Google Mapsが公開される前からGoogle Play Services APIを使用していたため、位置情報の更新が引き続きGoogle Mapsで機能していた理由です。

このリンク に従うことをお勧めします。この問題が発生した場合、LocationManagerを使用する代わりにPlay Services APIを使用して場所を取得する方法を示しています。

Playサービスで位置情報の更新を実行していますが、このような問題はもうありませんでした-常に定期的な位置情報の更新を受信し続けています。

注意してください。これには、ユーザーがデバイスにGoogle Playをインストールする必要があるため、Kindleなどが表示されなくなります。また、最小Android 2.2。

23
NumberFour

新しい携帯電話で作業している場合は、Googleマップアプリですべての契約に同意したかどうかを確認する必要があります。同意しない場合、NETWORK_PROVIDERから更新を受信できません。

0
knagode

現在、アプリのシャットダウンまたはアクティビティondestroyでremoveUpdates(listener)を使用していないことが原因であると考えています。私はそれを実装し、それが修正されることを願っています。他に何も考えられません。

-編集-これは残念ながら修正しませんでした。

0
Peterdk

1)最初に、上記で提案されている許可を与えているかどうかを確認します。 2)携帯電話でインターネットが機能していることを確認する必要があります。 3)以下のコードを見つけてください。

public void getLocationByNetworkProvider()
{       
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 10, new LocationListener() {
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub


        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onLocationChanged(Location location) {
         location.getLatitude();                                location.getLongitude();

        }
    });     

}`
0
User10001