LocationServices.SettingsApi重置SETTINGS_CHANGE_UNAVAILABLE标志

时间:2015-04-25 05:58:02

标签: android google-play-services

更新到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。

1 个答案:

答案 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);