LocationServices.SettingsApi重置SETTINGS_CHANGE_UNAVAILABLE标志

Dei*_*zan 14 android google-play-services

更新到Google Play Services v7.0 +,并在此示例中针对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);
Run Code Online (Sandbox Code Playgroud)

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

SUCCESS就OK重现,只是不停GPS功能的.

RESOLUTION_REQUIRED还行重现,只禁用GPS.

SETTINGS_CHANGE_UNAVAILABLE是交易:如果用户在RESOLUTION_REQUIRED执行步骤时选择"NEVER" ,结果将始终以此状态出现.

当用户选择"从不"选项时,Google Play服务是否可以选择以编程方式重置该标志?

我知道"从来没有"似乎是" 真的,不要再问我了!!! ",但我想创建一个选项,以防用户改变主意,当然,如果这是可能的.

在这种情况下,我将能够RESOLUTION_REQUIRED再次收到状态,并要求用户在下次执行应用程序时接受LocationUpdates.

Mat*_*ini 33

LocationSettingsRequest.Builder有一个方法setAlwaysShow,它可以改变对话框的按钮:

始终显示对话框,没有"从不"选项以禁止此应用程序的未来对话框.当此标志设置为true时,即使用户之前选择了"从不",该对话框也会显示位置设置是否不满足请求.注意:仅当对话框是由用户启动的显式操作(需要执行位置)的结果时才使用此方法.取消此对话框也应取消已启动的操作.

相反,默认,不是现在从不按钮,如果你打电话给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);
Run Code Online (Sandbox Code Playgroud)

  • 只是一个注意人 - 如果你打开飞机模式,并在请求时关闭位置,你将实际收到一个SETTINGS_CHANGE_UNAVAILABLE,即使你有setAlwaysShow (8认同)
  • 太好了!谢谢! (2认同)
  • 不错的解决方案!我注意到Google Maps没有_Never_按钮,但无法弄清楚它是如何做到的,并且几乎要在没有_Never_按钮的情况下实现自定义对话框。您的解决方案节省了一天! (2认同)