要求位置更新的频率超过5秒(Android融合位置) [英] Requesting location updates more often than 5 seconds (Android Fused location)

查看:132
本文介绍了要求位置更新的频率超过5秒(Android融合位置)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Im making a real time location listening app and i need to call location updates in every 3 seconds.

我使用 融合 位置。

I use Fused location.

我的间隔设置为3秒,但是此间隔的最小值似乎为 5秒。

My interval is set to 3 seconds, however it looks like the minumum value for this interval is 5 seconds.

代码:

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);

...

@Override
public void onLocationChanged(Location location) {

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

}

Logcat:

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

您可以看到 logcat的日期,延迟时间为5秒:41、46、51
我已经阅读过Google关于融合位置的文档,但是我没有找到有关最小间隔时间的任何信息。

You can see the logcat's date, it is in 5 seconds delay: 41, 46, 51 I have read Google's doc about Fused location but i haven't find anything about a minimal value of interval.

有什么建议吗?

编辑:

已添加 getTime()进行记录,并将其解析为 Date 对象,您可以更清楚地看到 5秒延迟

Added getTime() to log, and parsed it to a Date object, you can see the 5 second delay more clearly.

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): =========================================================

编辑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" />


推荐答案

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

Running your code in an Activity with the interval set to 0 produces updates at 1 per second on a Nexus 4, 5 and 7... just like using the LocationManager. You may be limited by your devices hardware. Have you just tried requesting the fastest update interval using LocationRequest and LocationManager? If they are both being limited to 5 seconds, I would suspect it is something device specific with the hardware.

位置请求:

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(0);
    mLocationRequest.setFastestInterval(0);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

Logcat:

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]

编辑:
文档还会告诉您,setInterval(long)可以以指定的慢速或快速进行更新

The Docs also tell you that setInterval(long) can have updates at a slower or faster rate that specified.

这篇关于要求位置更新的频率超过5秒(Android融合位置)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆