请求位置更新的频率超过 5 秒(Android Fused 位置)

Ada*_*gyi 2 android android-location android-fusedlocation

我正在制作一个实时位置监听应用程序,我需要每 3 秒调用一次位置更新

我使用融合位置。

我的间隔设置为 3 秒,但是看起来这个间隔的最小值是5 秒。

代码:

public class GpsService extends Service implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener {

private static int UPDATE_INTERVAL = 1000 * 3; // /< location update interval
private static int FASTEST_INTERVAL = 1000 * 3; // /< fastest location update interval
private static int DISPLACE_METERS = 10; // displacement in meters, not used atm
private LocationRequest mLocationRequest;
private LocationWrapper mLastLocation;

...


mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
Run Code Online (Sandbox Code Playgroud)

...

@Override
public void onLocationChanged(Location location) {

    mLastLocation = new LocationWrapper(location);
    log("onLocationChanged" + " " + mLastLocation.toString());

}
Run Code Online (Sandbox Code Playgroud)

日志猫:

03-11 14:35:41.559: I/Locationing_GpsService(7410): Lat: 47.513878
03-11 14:35:41.559: I/Locationing_GpsService(7410): Lng: 19.0362011
03-11 14:35:41.559: I/Locationing_GpsService(7410): Accuracy: 21.213 meters
03-11 14:35:41.559: I/Locationing_GpsService(7410): ===================
03-11 14:35:46.554: I/Locationing_GpsService(7410): Lat: 47.5138783
03-11 14:35:46.554: I/Locationing_GpsService(7410): Lng: 19.0362064
03-11 14:35:46.554: I/Locationing_GpsService(7410): Accuracy: 17.32 meters
03-11 14:35:46.554: I/Locationing_GpsService(7410): ===================
03-11 14:35:51.569: I/Locationing_GpsService(7410): Lat: 47.5138752
03-11 14:35:51.569: I/Locationing_GpsService(7410): Lng: 19.0362068
03-11 14:35:51.569: I/Locationing_GpsService(7410): Accuracy: 15.0 meters
Run Code Online (Sandbox Code Playgroud)

你可以看到logcat 的日期,它有 5 秒的延迟:41, 46, 51 我已经阅读了谷歌关于融合位置的文档,但我没有找到任何关于间隔最小值的信息。

有什么建议?

编辑:

添加getTime()到日志中,并解析为一个Date对象,可以更清楚地看到5秒的延迟

03-11 15:16:01.851: I/Locationing_GpsService(16747): Lat: 47.5138798
03-11 15:16:01.851: I/Locationing_GpsService(16747): Lng: 19.0362125
03-11 15:16:01.851: I/Locationing_GpsService(16747): Accuracy: 28.713 meters
03-11 15:16:01.851: I/Locationing_GpsService(16747): Time: Wed Mar 11 15:16:01 CET 2015   
03-11 15:16:01.851: I/Locationing_GpsService(16747): =========================================================
03-11 15:16:06.946: I/Locationing_GpsService(16747): Lat: 47.5138765
03-11 15:16:06.946: I/Locationing_GpsService(16747): Lng: 19.0361987
03-11 15:16:06.946: I/Locationing_GpsService(16747): Accuracy: 20.902 meters
03-11 15:16:06.946: I/Locationing_GpsService(16747): Time: Wed Mar 11 15:16:06 CET 2015   
03-11 15:16:06.946: I/Locationing_GpsService(16747): =========================================================
03-11 15:16:11.971: I/Locationing_GpsService(16747): Lat: 47.5138767
03-11 15:16:11.971: I/Locationing_GpsService(16747): Lng: 19.0361916
03-11 15:16:11.971: I/Locationing_GpsService(16747): Accuracy: 17.326 meters
03-11 15:16:11.971: I/Locationing_GpsService(16747): Time: Wed Mar 11 15:16:11 CET 2015   
03-11 15:16:11.971: I/Locationing_GpsService(16747): =========================================================
Run Code Online (Sandbox Code Playgroud)

编辑2:

权限:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

Kal*_*leb 5

在 Activity 中运行您的代码,间隔设置为 0,在 Nexus 4、5 和 7 上以每秒 1 次的速度产生更新……就像使用 LocationManager 一样。您可能会受到设备硬件的限制。您是否尝试过使用 LocationRequest 和 LocationManager 请求最快的更新间隔?如果它们都被限制在 5 秒内,我会怀疑它是特定于硬件的设备。

位置请求:

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(0);
    mLocationRequest.setFastestInterval(0);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
Run Code Online (Sandbox Code Playgroud)

日志猫:

03-11 09:50:26.931: D/MainActivity(5623): onLocationChanged Location[fused 0,0 acc=12 et=+1d17h57m7s979ms alt=1505.0 vel=0.0]
03-11 09:50:27.514: D/MainActivity(5623): onLocationChanged Location[fused 0,0, acc=12 et=+1d17h57m8s571ms alt=1505.0 vel=0.0]
Run Code Online (Sandbox Code Playgroud)

编辑:文档还告诉你的setInterval(长)可以在这个指定的更慢或更快的速度有更新。