web-dev-qa-db-ja.com

ロケーションマネージャーを停止するには?

理由はわかりませんが、アプリケーションを閉じた後も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();
 }
}

いくつかのアイデア、いくつかの提案、何が悪いのですか?

34
Tima

あなたの活動が破壊されていない可能性はありますか?つまり、ホームボタンを押します。 GPSの開始/停止をonStartonPauseに移動します。

12

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

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
    Log.i(TAG, "onPause, done");
}
28
bpz

エミュレータは、一度読み込まれると、GPSアイコンを決して取り除きません。そのため、エミュレータでは、GPSアイコンがGPSがまだ実行されているかどうかのテストとして使用できません。ただし、デバイスではアイコンが消えるはずです。

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

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

8
CommonsWare

私が使用するのは:locationManager.removeUpdates(locationListener);その働き

    @Override
protected void onPause() {
    super.onPause();
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }


    locationManager.removeUpdates(locationListener);
}
4
Sabari Esh

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

2
Alex