2

我正在收听 2 个位置提供商

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5,this); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 5, this);

有可能以某种方式删除一个听众吗?例如,对于一项任务,我只想使用 GPS 更新,而在执行此任务时,我希望 NETWORK_PROVIDER 将被禁用。有可能以某种方式吗?我试着这样做:

locationManager.removeUpdates(this); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5,this);

但这并不是很好,因为如果 GPS 已修复,此方法将删除它,并且 GPS 会再次开始搜索卫星。

4

1 回答 1

3

您可以创建两个不同的LocationListener

private LocationListener gpsListener = new LocationListener() {

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

    }

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

    }

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

    }

    @Override
    public void onLocationChanged(Location location) {
        if(location != null){
            // do your work for gps location
        }
    }
};
private LocationListener networkListener = .... // same init as gpsListener

并使用如下:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5, gpsListener); 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 5, networkListener);

然后您可以使用您正在执行的方法,而不会丢失 GPS 定位。代替:

locationManager.removeUpdates(this); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5,this);

您将使用:

locationManager.removeUpdates(networkListener); 
于 2013-10-18T08:11:55.277 回答