android locationManager继续在removeUpdates之后调用onLocationChanged

我有一个获取位置修复的应用程序。 该应用程序将从姜饼上推出到手机上。 一旦应用程序获得位置修复,向用户显示吐司消息。 问题是,当用户移动到下一个活动时,吐司消息可能出现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方法在姜饼上只运行一次?

谢谢。

我注意到,当我移动到下一个活动时,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);

下面的代码应该在onPause方法上执行,而不是在onStop上执行

mlocManager.removeUpdates(mlocListener); 
mlocListener = null;

这将解决所有Android版本。

链接地址: http://www.djcxy.com/p/11549.html

上一篇: android locationManager continues to call onLocationChanged after removeUpdates

下一篇: Unable to take screenshot in Selenium