1

ユーザーの位置を取得するアプリがあります。oncreate() に locationManager とリスナーを登録しました。それぞれ onResume() と onPause() で更新をリクエストして削除しました。アプリは場所を見つけて、onLocationChanged の loc オブジェクトで getTime() を呼び出します。これは、外部時間を取得し、後でシステム時間と比較するためです。この時間は、アプリケーション全体で使用できるように applicationObject で設定されます。すべてが正常に動作し、applicationObject 時間セッター メソッドからユーザーに時間を乾杯します。

私が見つけたのは、ユーザーの場所を修正して時間を見つけて次のアクティビティに移動すると、アプリはさらに 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();

.

4

2 に答える 2

1

onPause()、新しいアクティビティが開始された後にのみ呼び出すことができます。

単一の のみが必要な場合onLocationChange()は、使用できrequestSingleUpdate()、問題はなくなりました。

よろしく。

于 2012-11-13T12:35:32.427 に答える
0

removeUpdates(); の直後に mlocListener を null に設定します。

于 2012-11-13T11:50:01.117 に答える