【发布时间】:2014-11-29 19:05:27
【问题描述】:
这是我注册我的应用以接收位置更新的方式:
mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(Consts.ONE_MINUTE * 10);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setFastestInterval(Consts.ONE_MINUTE);
Builder builder = new GoogleApiClient.Builder(context);
builder.addApi(ActivityRecognition.API);
mGoogleApiClient = builder.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
....
....
@Override
public void onConnected(Bundle connectionHint) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationUpdatespendingInent);
}
我的待定意图几乎在确切请求的时间间隔内在后台被调用...
到目前为止一切顺利。
问题:当 WIFI 被禁用/未连接到任何网络,或者没有启用 3G/4G 网络数据时 - 融合的位置提供程序不提供新的位置更新!!
我的位置信息访问设置已打开,并检查了 GPS 卫星和 WI-FI 和移动网络位置。
更大的问题:有时在这种情况下,我确实会通过挂起的意图收到位置更新回调,但它知道的最后一个位置(即使是一个小时前,而且我离那个地方好远好远)
根据PRIORITY_BALANCED_POWER_ACCURACY的文档:
与 setPriority(int) 一起使用以请求“块”级别的准确性。 块级精度被认为是大约 100 米的精度。使用这样的粗略精度通常会消耗更少的功率。
我希望融合位置提供者在别无选择时会打开 GPS,或者如果他没有任何其他选择,至少不会提供新的位置更新。
另一个不可预测和令人不安的问题:
我将 PRIORITY_BALANCED_POWER_ACCURACY 更改为 PRIORITY_HIGH_ACCURACY 以查看它的行为(24 小时)。所有间隔保持不变(更新之间的间隔为 10 分钟)。即使在没有网络/SIM 卡的手机中也确实收到了准确的位置,但是 - 电池很快耗尽了!当我查看电池历史记录时,我很惊讶地发现 GPS 无线电一直处于全传输模式!!!! 而且我还在日志中看到每分钟都会收到位置信息,甚至我每十分钟请求一次位置(我没有任何其他安装的应用程序可以打开 GPS 来接收位置..)
我在几台设备(例如 Moto X 2013、HTC One X、Nexus 5)上注意到了这种行为,所有设备都使用最新的 Google Play 服务(版本 6.1.11)和 android KITKAT 4.4.4
我的应用程序很大程度上依赖于用户当前的位置,只要用户登录,就会在指定的时间间隔内定期接收位置更新,所以我不想使用PRIORITY_HIGH_ACCURACY 模式,以防止电池耗尽。 .
我的问题:
如果融合位置提供商设置为接收
PRIORITY_BALANCED_POWER_ACCURACY的更新并且没有任何 WI-FI 或手机信号塔信息,它是否应该使用 GPS?如果是这样,那我做错了什么?
为什么我会收到这种不正确的误导性位置更新? (正如我在“更大的问题”部分中解释的那样..
当我使用
PRIORITY_HIGH_ACCURACY参数时,为什么 GPS 无线电一直打开而不是 10 分钟间隔打开? (我没有其他可以更快触发位置更新的已安装应用程序..)
【问题讨论】:
标签: android gps google-play-services android-location location-services