android locationlistener在取消注册侦听器后继续调用onlocationChanged

时间:2012-11-13 11:40:33

标签: android gps location

我有一个获取用户位置的应用。我在oncreate()中注册了locationManager和listener。我已分别请求并删除onResume()和onPause()中的更新。应用程序找到位置并在onLocationChanged的loc对象上调用getTime(),这是获取外部时间,然后比较系统时间。此时间在applicationObject中设置,以便在应用程序范围内可用。一切正常,我从applicationObject time setter方法向用户致敬。

我发现的是,当我通过修复用户的位置找到时间,并且我转到下一个活动时,应用程序继续获得另外20秒的时间,有时甚至更多。

当我在第一个活动的onPause()方法中取消注册locaction侦听器时,这怎么可能?

    @Override
        protected void onPause() {
            mlocManager.removeUpdates(mlocListener);
            super.onPause();
        }


    @Override
        protected void onResume() {

             mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
            super.onResume();
        }

         private class MyLocationListener implements LocationListener {

                @Override
                public void onLocationChanged(Location loc) {



                    Log.e(TAG, "external time = " + loc.getTime());
                    DateTime dt = new DateTime(loc.getTime());
                    DateTimeFormatter df3 = DateTimeFormat.forPattern("yyyy-MM-dd H:mm:ss.SSS");
                    String formattedNowTime3 = df3.print(dt);
                    Log.e(TAG, "formatted ext time = " + formattedNowTime3);
                    nfcscannerapplication.setExternalTime(dt);

                }

                @Override
                public void onProviderDisabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderEnabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                    // TODO Auto-generated method stub

                }

                }//end of MyLocationListener


@Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.entryscreen);

        mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        mlocListener = new MyLocationListener();

2 个答案:

答案 0 :(得分:1)

只有在新活动开始后才能调用onPause()

如果您只想要一个onLocationChange(),则可以使用requestSingleUpdate(),问题就不复存在了。

问候。

答案 1 :(得分:0)

在removeUpdates();

之后将mlocListener设置为null