如何以特定速率获取gps位置更新?

时间:2012-07-20 12:16:32

标签: android gps location

我正在开发一个需要快速获取位置更新的应用程序,与它们的准确性无关。我需要能够每秒读取一次。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

除了为0中的最小距离和最小时间值指定requestLocationUpdates()之外,您无法控制费率。 Android会为您提供它收到的所有修复程序,但是这是每秒30次修复还是每次修复30秒将取决于硬件,环境(例如,用户在室内?),等等。

答案 1 :(得分:2)

您可以在Android位置更新和收件人之间构建一个图层 在您自己的图层中,捕获Android位置更新,并将同一位置每秒传递30次到您的接收器,直到您获得新位置。

修改
这样的事情(未经测试):

public class MyLocationManager implements LocationListener{

    private List<MyLocationListener> listeners;
    private Location lastLocation;
    private Handler handler;

    public MyLocationManager(){
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

        listeners = new ArrayList<MyLocationListener>();
        handler = new Handler();

        sendLocationUpdates();
    }

    private void sendDelayedLocationUpdates(){
        handler.postDelayed(locationUpdater, 200);
    }

    public void addMyLocationListener(MyLocationListener mListener){
        listeners.add(mListener);
    }

    public void removeMyLocationListener(MyLocationListener mListener){
        listeners.remove(mListener);
    }

    @Override
    public void onLocationChanged(Location location) {
        lastLocation = location;
    }

    public interface MyLocationListener{
        public void onLocationChanged(Location location);
    }

    private Runnable locationUpdater = new Runnable(){
            @Override
            public void run(){
                for(MyLocationListener mListener : listeners){
                    mListener.onLocationChanged(lastLocation);
                }

                sendDelayedLocationUpdates();
            }
    };
}