理由はわかりませんが、アプリケーションを閉じた後も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();
}
}
いくつかのアイデア、いくつかの提案、何が悪いのですか?
あなたの活動が破壊されていない可能性はありますか?つまり、ホームボタンを押します。 GPSの開始/停止をonStart
とonPause
に移動します。
メソッドremoveUpdates
内でメソッドonPause
を呼び出す必要があります。
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
Log.i(TAG, "onPause, done");
}
エミュレータは、一度読み込まれると、GPSアイコンを決して取り除きません。そのため、エミュレータでは、GPSアイコンがGPSがまだ実行されているかどうかのテストとして使用できません。ただし、デバイスではアイコンが消えるはずです。
2つの異なるリスナーを使用する必要がありますか?
私はそうするでしょう。 removeUpdates()
が両方を削除するかどうか、または両方のリクエストが単一のリスナーに登録されている場合でもわかりません。
私が使用するのは: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);
}
この投稿からしばらく経っているようですが、おそらく他の体に役立つでしょう。私が使用するのは、removeUpdates(this)です。私のリスナーは、ロケーションマネージャを実装するアクティビティであるため、リスナーを指定する必要があります。