我正在开发一个Android应用程序,我需要在其中显示每秒30-40次更新的位置更新。 我正在使用Google I / O 2013中引入的Location APIs of Google Play Services。它使用融合位置提供商(利用加速计和其他传感器以及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秒收到一次更新。
这几乎就像是GPS传感器的更新频率 任何Android手机。但我期待更多,因为这是使用Fusion 传感器(包括加速度计)。加速度计是其中的一部分 融合传感器应该产生比这更高的频率。
我已经尝试了间隔的其他值,但是间隔时间不到1秒就无法获得更新。此外,ACCESS_FINE_LOCATION用于清单中的权限。
我在这里遗漏了什么吗?他们是否有其他方法来实现这一目标?我将非常感谢任何帮助来解决这个问题。
答案 0 :(得分:3)
目前,您无法以每秒一次的速度获得更新。这是硬件gps限制。网络位置稍慢(在室内使用) - 目前大约每5秒一次。原始加速度计数据以更高的频率进入,但直接集成时往往非常嘈杂。这可能会在将来有所改善,但可能不是您正在寻找的高频率。
答案 1 :(得分:1)
我正在尝试使用以下参数进行更改,并使用我设置的任何内容为其工作。
locationRequest.setFastestInterval(10000); // Every 10 sec it gives lat/lng
请尝试同样的改变。
答案 2 :(得分:0)
我认为问题在于您设置了PRIORITY_HIGH_ACCURACY。 High_accuracy = GPS提供商
手机中的Gps芯片组通常只有~1Hz的更新速率。
如果你禁用HighAccuracy,也许它可以工作。
答案 3 :(得分:-5)
事实是有一个你不能忽视的硬件延迟。尝试将浮动传递给您的间隔。每次更新后杀死僵尸也可能有所帮助。