这就是我注册我的应用程序以接收位置更新的方式:
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分钟间隔打开?(我没有其他安装的应用程序可以更快地触发位置更新..)