3

我需要找到超时的用户位置,然后我写了这样的代码

  1. 启动 LocationListener

    GPSLocationListener = new LocationListener() {
    
    @Override
    public void onLocationChanged(Location location) {
             _timerGPSLocation.cancel();
    }
    
    @Override
    public void onStatusChanged(String provider, int status, Bundle b) {
    }
    
    @Override
    public void onProviderEnabled(String s) {
    }
    
    @Override
    public void onProviderDisabled(String s) {
    }
    };
    
     _locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, _GPSLocationListener);
    

    `

  2. 设置超时计时器

    _timerGPSLocation = new Timer();
    _timerGPSLocation.schedule( new TimerTask() {
    
    @Override
    public void run() {
        _locationManager.removeUpdates(_GPSLocationListener);
    }
    
    }, (long)(timeout*1000) ); 
    

我认为多次这样做(尝试读取坐标并设置超时计时器)可以让 GPS 联系一些卫星并给我正确的位置。有更好的方法吗?超时调用 _locationManager.removeUpdates 会删除所有联系的卫星吗?

编辑:

我的目标是定期(5 分钟)读取 GPS。在尝试使用 GPS 读取获取位置时,我还需要设置超时。如果超时后没有读取位置,我需要停止位置侦听器。我已经使用这里的代码列表实现了这一点。

现在我的问题是,如果因为超时而删除 LocationListener 会导致 GPS 和卫星之间的“确认”丢失。

4

1 回答 1

1

安排一个计时器将适用于您正在尝试做的事情。同样,您可以使用处理程序并将其传递给线程或 Looper 对象。如在

Handler h = new Handler();

h.postDelayed(Runnable r, long millis);

有了它,您还可以延迟发布一个可运行的,即线程或活套,以取消位置更新。

编辑: postDelayed 用于可运行在一定延迟后运行。postAtTime 在程序的某个正常运行时间发布

于 2013-01-19T01:08:28.793 回答