tur*_*boy 8 gps android location
我有一个应用程序,可以获得位置修复.该应用程序将从Gingerbread推出到手机上.一旦应用程序获得位置修复,就会向用户显示Toast消息.问题是当用户移动到下一个活动时,吐司消息可能会再出现十次.
我想我已经正确地实现了生命周期,例如
1)在onCreate()中获取位置管理器2)在onResume()中创建并将位置监听器传递给管理器3)删除onStop()中的更新
我知道我可以通过调用在Android> 4.x中绕过这个问题
mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null);
Run Code Online (Sandbox Code Playgroud)
但是我必须容纳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);
Run Code Online (Sandbox Code Playgroud)
下面的代码应该在onPause方法中执行,而不是在onStop中执行
mlocManager.removeUpdates(mlocListener);
mlocListener = null;
Run Code Online (Sandbox Code Playgroud)
这将为所有 Android 版本修复该问题。