我正在开发一个需要快速获取位置更新的应用程序,与它们的准确性无关。我需要能够每秒读取一次。我怎么能这样做?
答案 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();
}
};
}