0

すべてのリスナーを取得して、デバイスの場所を取得しようとしています。

LocationManager locationManager = (LocationManager) myContext.getApplicationContext()
        .getSystemService(Context.LOCATION_SERVICE);


for (String s : locationManager.getAllProviders()) {

    locationManager.requestLocationUpdates(s, checkInterval,
            minDistance, new LocationListener() {


                @Override
                public void onProviderEnabled(String provider) {

                }

                @Override
                public void onProviderDisabled(String provider) {

                }

                @Override
                public void onLocationChanged(Location location) {
                    // if this is a gps location, we can use it
                    if (location.getProvider().equals(
                            LocationManager.GPS_PROVIDER)) {
                        doLocationUpdate(location, true);
                        stopGPS();
                    }
                }

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

                }
            });

        gps_recorder_running = true;
}

// start the gps receiver thread
gpsTimer.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        Location location = getBestLocation();
doLocationUpdate(location, false);
if ((System.currentTimeMillis()-startMillis)>maxCheckTime){stopGPS();}

    }
}, 0, checkInterval);

}

問題は、リスナーを停止したいときに発生します。タイマーをキャンセルしようとしました:

gpsTimer.cancel();

しかし、それはリスナーを止めません。locationManager.removeUpdatesを使用する必要があると思いますが、すべてのリスナーを停止するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

登録するすべてのロケーションリスナーのリストを保持し、完了したらそれぞれのリスナーの登録解除を呼び出す必要があります。それか、呼び出しごとに同じリスナーを再利用してから、一度登録を解除します。

編集

//Make the following line a field in your class
List<LocationListener> myListeners = new ArrayList<LocationListener>();

for (String s : locationManager.getAllProviders()) {
LocationListener listener = new LocationListener() { .... }; //I'm cutting out the implementation here
myListeners.add(listener);

 locationManager.requestLocationUpdates(s, checkInterval,
            minDistance, listener);
}
于 2013-02-07T18:11:57.377 に答える