我正在开发一个 android 应用程序,我需要在其中显示位置更新,每秒大约 30-40 次更新。我正在使用Google Play Services 的 Location API,在 Google I/O 2013 中引入。它使用融合的位置提供程序(利用加速度计和其他传感器以及 GPS)来进行更准确和有效的位置跟踪。
这是我的代码:
protected void startLocationTracking() {
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this)) {
mLocationClient = new LocationClient(this, mConnectionCallbacks, mConnectionFailedListener);
mLocationClient.connect();
}
}
private ConnectionCallbacks mConnectionCallbacks = new ConnectionCallbacks() {
@Override
public void onDisconnected() {
}
@Override
public void onConnected(Bundle arg0) {
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setFastestInterval(0);
locationRequest.setInterval(0).setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationClient.requestLocationUpdates(locationRequest, mLocationListener);
}
};
private OnConnectionFailedListener mConnectionFailedListener = new OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult arg0) {
Log.e(TAG, "ConnectionFailed");
}
};
private LocationListener mLocationListener = new LocationListener() {
private long mLastEventTime = 0;
@Override
public void onLocationChanged(Location location) {
double delayBtnEvents = (System.nanoTime()- mLastEventTime )/(1000000000.0);
mLastEventTime = System.nanoTime();
//Sampling rate is the frequency at which updates are received
String samplingRate = (new DecimalFormat("0.0000").format(1/delayBtnEvents));
float speed = (float) (location.getSpeed() * 3.6); // Converting m/s to Km/hr
tv.setText(speed + " kmph" + ", " + samplingRate + " Hz"); //Updating UI
}
};
我已将优先级设置为 PRIORITY_HIGH_ACCURACY 并将间隔和最快间隔设置为 0 毫秒。但我仍然每 1 秒收到一次更新。
这看起来很像任何 Android 手机的 GPS 传感器的更新频率。但我期待更多,因为这是使用融合传感器(包括加速度计)。作为聚变传感器的一部分的加速度计应该产生比这更高的频率。
我尝试了其他间隔值,但在不到 1 秒的间隔内无法获得更新。ACCESS_FINE_LOCATION 也用于清单中的权限。
我在这里错过了什么吗?他们还有其他方法可以做到这一点吗?对于解决此问题的任何帮助,我将不胜感激。