位置情報を取得するアプリがあります。このアプリは、Gingerbread から携帯電話に展開される予定です。アプリが位置情報を取得すると、トースト メッセージがユーザーに表示されます。問題は、ユーザーが次のアクティビティに移動したときに、トースト メッセージがさらに 10 回表示されることです。
私はライフサイクルを正しく実装したと思います。
1) onCreate() でロケーション マネージャーを取得する 2) onResume() でロケーション リスナーを作成してマネージャーに渡す 3) onStop() で更新を削除する
Android > 4.x でこの問題を回避できることを理解しています
mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null);
しかし、ジンジャーブレッドに対応する必要があるため、単一のリクエストを呼び出すことはapi 2.3.xではありません。Android 4 では問題なく動作しますが、ジンジャーブレッドでは onLocationChanged メソッドがさらに 10 回実行され続けます。
ジンジャーブレッドで onLocationChanged メソッドを強制的に 1 回だけ実行するにはどうすればよいですか?
ありがとう。
[編集] 次のアクティビティに移動すると、onlocationchanged メソッドが実行され続けますが、さらにアクティビティに移動すると、場所のリクエストが正常に削除されることに気付きました
@Override
protected void onStop() {
mlocManager.removeUpdates(mlocListener);
mlocListener = null;
super.onStop();
}
@Override
protected void onResume() {
mlocListener = new MyLocationListener();
if(isCompOptionsReceived == true){
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) {
mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null);
}else{
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
}
}
super.onResume();
}
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
//toast message
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}//end of MyLocationListener
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
nfcscannerapplication = (NfcScannerApplication) getApplication();
sIs = savedInstanceState;
setContentView(R.layout.entryscreen);
mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);