【问题标题】:How to stop location listeners如何停止位置监听器
【发布时间】:2013-02-07 18:08:11
【问题描述】:

我正在尝试通过获取所有侦听器来获取设备位置:

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,但是如何停止所有 Listeners?

谢谢

【问题讨论】:

    标签: android location listeners


    【解决方案1】:

    您必须保留您注册的所有位置侦听器的列表,然后在完成后对每个侦听器调用 unregister。要么为每个调用重用相同的侦听器,然后注销一次。

    编辑

    //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);
    }
    

    【讨论】:

    • 嗨贾斯汀,你能给我举个例子吗?因为我认为就是这样,但我不知道该怎么做。谢谢!
    • 谢谢!这实际上比我想象的要容易!
    • 当然,完成后别忘了注销整个列表。此外,如果您不想要监听器列表(即,它始终是相同的代码),您可以多次注册一个监听器,并且只取消注册一次。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多