更新到Google Play Services v7.0 +,并基于this sample for Android中的LocationUpdates,我有以下代码连接到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
并要求用户在下次执行该应用时接受LocationUpdates。
答案 0 :(得分:32)
LocationSettingsRequest.Builder有一个方法setAlwaysShow,用于更改对话框的按钮:
始终显示对话框,没有“从不”选项来抑制未来 这个应用程序的对话框。当此标志设置为true时,对话框将为 如果位置设置不满足请求,则显示,即使a 用户之前选择了“从不”。注意:如果您的,请仅使用此方法 dialog是用户启动的显式操作的结果 要求地点继续进行。取消此对话框也应取消 已启动的行动。
而是默认是,不是现在和从不按钮,如果您拨打setAlwaysShow(true);
,您将只有是和否,因此用户不会选择从不,您将永远不会收到SETTINGS_CHANGE_UNAVAILABLE
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
builder.setAlwaysShow(true);
mLocationSettingsRequest = builder.build();
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(
mLocationClient,
mLocationSettingsRequest
);
result.setResultCallback(this);