1

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

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

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

    @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();

.

4

2 回答 2

1

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

如果你只想要一个onLocationChange(),你可以使用requestSingleUpdate(),你的问题就消失了。

问候。

于 2012-11-13T12:35:32.427 回答
0

在 removeUpdates() 之后将 mlocListener 设置为 null;

于 2012-11-13T11:50:01.117 回答