我有一个跟踪设备位置的应用。在过去,我使用了Android框架位置API。按预期工作 - 所以没有必要改变它。 但现在我想从Google建议使用的Google Play服务评估位置服务,因此我相应地更改了我的应用。有一些选项可能会在未来派上用场。
为此,我跟随 https://developer.android.com/training/location/change-location-settings.html 我解决了相当复杂的依赖关系和要求后,我现在有一个工作配置。但是有一些问题:
第1部分
似乎没有选择使用“仅设备”模式(意味着只有GPS用于定位服务,而不是WiFi等......
如果我使用PRIORITY_HIGH_ACCURACY,间隔10000和最小位移20请求位置更新,则挂起的LocationSettingsResult始终返回状态为RESOLUTION_REQUIRED,如果设备设置为位置模式“仅设备”。 分辨率是激活“高精度”模式,也可以启用WiFi等。 但在此模式下,位置数据会发送给Google,这可能会对某些用户造成隐私问题。
我认为这是一个错误,因为“仅设备”模式应该足以满足请求。 在哪里提交Google Play服务的错误?不幸的是,这些问题超出了AOSP Bug Tracker的范围,我也不知道有任何官方地方可以提交此类错误。
当要从服务启动位置请求时,会出现另一个问题。如果现在状态为RESOLUTION_REQUIRED如何解决这种情况? Google提供的解决方案需要针对解决方案的活动。但是在服务中没有可用于此的活动。 LocationSettingsResult的状态对象可以访问LocationSettingsStates对象 - 但是如何提取问题的原因和可能的解决方案?
答案 0 :(得分:1)
我遇到了完全相同的问题 - 当手机(Moto G4)设置为“仅设备”模式时,FusedLocationProvider没有响应位置数据。经过一些实验,结果是由于手机盖阻挡了GPS信号!使用像GPS Status and Toolbox这样的应用确实有助于找出卫星的信号强度,是否接收到修复等,
答案 1 :(得分:0)
关于启动结果解析的第二个活动问题:LocationSettingsResult是一个Parcelable对象。因此,您可以使用PutExtra将其与Intent捆绑在一起,并将其广播到活动以启动更正操作。下面的代码片段说明了解包意图和解决状态。
Status status = intent.getParcelableExtra(Constants.EXTRA_SETTINGS_UPDATE_REQD);
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can
// initialize location requests here.
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied, but this can be fixed
// by showing the user a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult(getActivity(),
Constants.REQ_CODE_CHECK_SYSTEM_SETTINGS_LOC);
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way
// to fix the settings so we won't show the dialog.
break;
}