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?
質問する
1202 次
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 に答える