如果用户选择"从不"选项,则为Android启用位置服务

nsL*_*nsL 12 android location location-services

如果用户之前选择了"从不"选项,是否有任何方法可以再次为应用程序(或至少显示对话框)提供位置服务?

在此输入图像描述

我在代码中找不到任何方法再次显示它,因为我总是在onResult(..)回调中得到LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:

    @Override
    public void onResult(LocationSettingsResult locationSettingsResult) {
        final Status status = locationSettingsResult.getStatus();
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:
                Log.i(TAG, "All location settings are satisfied.");
//                        startLocationUpdates();
                break;
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" +
                        "upgrade location settings ");

                try {
                    // Show the dialog by calling startResolutionForResult(), and check the result
                    // in onActivityResult().
                    status.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS);

                } catch (IntentSender.SendIntentException e) {
                    Log.i(TAG, "PendingIntent unable to execute request.");
                }
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " +
                        "not created.");
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我找到的唯一解决方案是重新安装应用程序或清除数据.

Amr*_*ngh 27

我没有找到任何解决方法来启用位置服务,如果之前用户选择了" 从不 "选项,那么我按照@Lesvmac上面的回答再次要求用户删除并重新安装应用程序,但是我认为这不是正确的解决方法这个问题围绕着.

所以目前最好的方法是不允许"Never"选项出现在请求对话框中.尝试添加

builder.setAlwaysShow(true);
Run Code Online (Sandbox Code Playgroud)

LocationSettingsRequest.Builder ,它只会产生" "和" "选项,而不是默认的" 从不 "," "和" 不是现在 ",你将永远不会收到SETTINGS_CHANGE_UNAVAILABLE

这是完整的方法:

 private void requestSettings() {
    LocationSettingsRequest.Builder builder =
            new LocationSettingsRequest.Builder()
                    .setAlwaysShow(true)
                    .addLocationRequest(request);
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,
                    builder.build());

    result.setResultCallback(this);
}
Run Code Online (Sandbox Code Playgroud)

之前
image_before_set_always_show

image_after_set_always_show