【问题标题】:LocationSettingsRequest returns 0 to onActivityResult even if ok is clicked即使单击确定,LocationSettingsRequest 也会向 onActivityResult 返回 0
【发布时间】:2019-03-28 16:27:06
【问题描述】:

我正在使用以下代码显示弹出窗口以打开位置

        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest);
    SettingsClient client = LocationServices.getSettingsClient(getActivity());
    Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

    task.addOnSuccessListener(getActivity(), new OnSuccessListener<LocationSettingsResponse>() {
        @Override
        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
            // All location settings are satisfied. The client can initialize
            // location requests here.
            // ...
            getUserLocation();
        }
    });

    task.addOnFailureListener(getActivity(), new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            int statusCode = ((ApiException) e).getStatusCode();
            Log.d("AMOD", "onFailure " + statusCode);
            switch (statusCode) {
                case CommonStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied, but this can be fixed
                    // by showing the user a dialog.
                    try {

                        ResolvableApiException resolvable = (ResolvableApiException) e;
                        resolvable.startResolutionForResult(getActivity(),
                                REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException sendEx) {
                        // Ignore the error.
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way
                    // to fix the settings so we won't show the dialog.
                    break;
            }
        }
    });

以下是代码 它显示如下弹出窗口

但有时即使用户点击 Ok 我也会得到响应 0 即 RESULT_CANCEL 在将播放服务更新到 16.0.0 后会发生这种情况

在 google issuetracker 上报告了这个错误,下面是关于它的更多详细信息的链接

https://issuetracker.google.com/issues/118347902

【问题讨论】:

  • 请发布您用于接收弹出结果的代码
  • 你在 onActivityResult 中调用 super 吗?如果是这样,请尝试将其删除并告诉我是否可以解决您的问题
  • 我有同样的问题,我发现有时它来到onActivityResult 并启动 NETWORK_PROVIDER && GPS_PROVIDER 结果正常,有时它导致取消并启动仅设备定位模式。这是我的问题stackoverflow.com/questions/53387741/…

标签: android google-play-services android-support-library android-location onactivityresult


【解决方案1】:

我只尝试了大约 50 次来重现这个,我总是得到代码 -1(运行 Android Pie 的 Pixel 3)。但我在运行 Oreo 的 Nexus 5x 上大约有一半的时间为 0。

我无法准确地找出你做错了什么,但这是我制作的一个示例项目,它做同样的事情并且每次都能正常工作:

https://github.com/gavingt/basic_location_improved

【讨论】:

  • 使用支持库版本 16.0.0,是的问题仅发生在 android N 和更低的操作系统版本上
  • 为什么你的应用的targetSDKVersion这么低?它显然小于 23,因为它没有请求运行时权限。这可能与它有关。无论哪种方式,您都应该从我的代码开始作为基线,因为您正在做的事情不起作用而我的工作很好。
  • 这只是演示应用程序,因为我没有足够的时间来处理权限,而且它只是一个样本,目标 23。但尝试使用 sdk 27​​ 并启用设置问题的权限仍然存在
  • 没有完整的项目文件,很难判断问题所在。但我猜这与您的 Gradle 依赖项有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多