我有一个可以修复位置的应用程序。该应用程序将从 Gingerbread 开始推广到手机上。一旦应用程序获得位置修复,就会向用户显示 toast 消息。问题是当用户移动到下一个活动时,toast 消息可能会出现十次以上。
我想我已经正确地实现了生命周期,例如
1) 在 onCreate() 中获取位置管理器 2) 在 onResume() 中创建位置侦听器并将其传递给管理器 3) 在 onStop() 中删除更新
我知道我可以通过调用绕过 Android > 4.x 中的这个问题
mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null);
但我必须适应 Gingerbread,所以调用单个请求不在 api 2.3.x 中。它在 Android 4 上运行良好,但在姜饼上,onLocationChanged 方法继续执行 10 次。
如何强制 onLocationChanged 方法在姜饼上只运行一次?
谢谢。
[编辑] 我注意到,当我移动到下一个活动时,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);