Google Play服务中的LocationRequest不会更新,间隔设置为小于1秒。

我正在开发一个Android应用程序,我需要在其中显示每秒30-40次更新的位置更新。 我正在使用Google I / O 2013中引入的Google Play服务的位置API 。它使用融合位置提供商(利用加速度计和其他传感器以及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传感器的更新频率。 但我期待更多,因为这是使用Fusion传感器(包括加速度计)。 作为融合传感器一部分的加速度计应该产生比这更高的频率。

我已经尝试了间隔的其他值,但是不能以不到1秒的间隔获得更新。 此外,ACCESS_FINE_LOCATION用于清单中的权限。

我在这里错过了什么吗? 他们是否有其他方法来实现这一目标? 我会很感激任何帮助来解决这个问题。

目前,您无法以每秒一次的速度获得更新。 这是硬件gps限制。 网络位置有点慢(在室内使用) – 目前大约每5秒一次。 原始加速度计数据以更高的频率进入,但直接集成时往往非常嘈杂。 这可能会在将来有所改善,但可能不是您正在寻找的高频率。

我试图用以下参数进行更改,并且无论我设置什么,它都适合我。

 locationRequest.setFastestInterval(10000); // Every 10 sec it gives lat/lng 

请尝试与您相同的改变。

我认为问题是您设置PRIORITY_HIGH_ACCURACY。 High_accuracy = GPS提供商

手机中的Gps芯片组通常只有~1Hz的更新率。

如果禁用HighAccuracy,也许它可以工作。

事实是有一个你不能忽视的硬​​件延迟。 尝试将浮动传递给您的间隔。 每次更新后杀死僵尸也可能有所帮助。