我现在更新到Google Play服务v7.0+,并基于这个示例在Android中进行位置更新,我有以下代码来连接到LocationServices.SettingsApi
并检查用户是否已准备好应用程序接收位置更新。
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
mLocationSettingsRequest = builder.build();
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(
mLocationClient,
mLocationSettingsRequest
);
result.setResultCallback(this);
其中this
是以下回调函数:
@Override
public void onResult(LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
Intent resolutionIntent;
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// Everything is OK, starting request location updates
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Seems the user need to change setting to enable locations updates, call startResolutionForResult(Activity, REQUEST_CODE)
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Error, cannot retrieve location updates.
break;
}
}
SUCCESS
状态可以复现,只需启用GPS即可。
RESOLUTION_REQUIRED
状态也可以复现,只需禁用GPS即可。
SETTINGS_CHANGE_UNAVAILABLE
状态是个问题:如果用户在执行 RESOLUTION_REQUIRED
步骤时选择了“从不”,则结果始终会带有此状态。
Google Play服务是否有一个选项可以在用户选择“从不”选项时以编程方式重置标志呢?
我知道“从不”似乎意味着 “真的,不要再问我了!!!” 但我想创建一个选项以防用户改变主意,当然,如果可能的话。
这样的话,下次应用程序执行时,我就能再次收到状态 RESOLUTION_REQUIRED
并要求用户接受位置更新。