0

I'm developing an application that needs to get location updates fast, doesn't matter the accuracy of them. I need to be able to get about one reading per second. How can I do this?

4

2 に答える 2

4

0で最小距離と最小時間の両方の値を指定する以外requestLocationUpdates()に、速度を制御することはできません。Android は受信したすべての修正を提供しますが、それが 1 秒あたり 30 回の修正であるか、1 回の修正で 30 秒であるかは、ハードウェア、環境 (ユーザーが屋内にいるかどうかなど) などによって異なります。

于 2012-07-20T12:22:07.097 に答える
2

Android の位置情報の更新と受信機の間にレイヤーを構築できます。
独自のレイヤーで、Android の位置情報の更新をキャッチし、新しい位置情報を取得するまで、1 秒あたり 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();
            }
    };
}
于 2012-07-20T12:23:50.030 に答える