35

理由はわかりませんが、アプリケーションを閉じた後も LocationManager が動作していることがあります。

1 つのアクティビティで onCreate-Methode の startGPS() を呼び出します (1 つだけ、StartActivity と呼びましょう)。

protected void startGPS(){    
 try {           
     lmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
     lmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
     lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
 } catch(Exception e) {
     e.printStackTrace();
 }
}

このアクティビティが破棄される場合 (つまり、アプリケーションが閉じられるとき)、endGPS() を呼び出します。

public void endGPS(){
 try {           
     lmanager.removeUpdates(this);
     lmanager=null;
 } catch(Exception e) {
  e.printStackTrace();
 }
}

いくつかのアイデア、いくつかの提案、私は何を間違えましたか?!

4

6 に答える 6

33

removeUpdatesメソッド内でメソッドを呼び出す必要がありますonPause

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
    Log.i(TAG, "onPause, done");
}
于 2014-07-17T09:54:20.743 に答える
13

あなたの活動が破壊されていない可能性はありますか?つまり、ホームボタンを押します。GPS のスタート/ストップをonStartとに移動しますonPause

于 2010-11-16T18:19:36.190 に答える
8

エミュレータは、ロードされたGPSアイコンを削除することはありません。したがって、エミュレータでは、GPSアイコンをGPSがまだ実行されているかどうかのテストとして使用することはできません。ただし、デバイスでは、アイコンが消えるはずです。

2つの異なるリスナーを使用する必要がありますか?

きっとそうするでしょう。removeUpdates()両方を削除するのか、それとも両方のリクエストが単一のリスナーに登録されているのかはわかりません。

于 2010-11-16T22:25:51.687 に答える
2

この投稿からしばらく経ちましたが、他の体に役立つかもしれません。私が使用するのは、removeUpdates(this) です。私のリスナーはロケーション マネージャーを実装するアクティビティであるため、リスナーを指定する必要があります。

于 2011-08-17T17:58:26.593 に答える
0

かなり古い奇妙なものですが、これは私にとってはうまくいきます。

       @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        mLocationManager.removeUpdates(locationListener);

        }
于 2020-05-22T23:20:37.563 に答える