SettingsClient 的位置请求始终为 RESULT_CANCELED

2023-11-21

在获取当前位置流时,我使用 SettingsClient 根据当前 LocationRequest 检查位置设置是否得到满足。 目前,我的优先级设置为HIGH_ACCURACY,这需要不惜一切代价启用GPS。

        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
        settingsClient = LocationServices.getSettingsClient(this);
        locationRequest = LocationRequest.create()
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                .setInterval(500)
                .setFastestInterval(500);
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
        builder.addLocationRequest(locationRequest);
        locationSettingsRequest = builder.build();

现在,当我调用 SettingsClient.checkLocationSettings() 为其提供侦听器时,

settingsClient.checkLocationSettings(locationSettingsRequest)
                .addOnCompleteListener(this)
                .addOnFailureListener(this);

它落入onFailure(),github 上的 google 官方示例在这种情况下采取以下方法;

检查 onFailure() 中收到的异常状态码,如果是 LocationSettingsStatusCodes.RESOLUTION_REQUIRED, 然后调用startResolutionForResult(),它允许我们启用GPS,这使用onActivityResult等待结果。

    @Override
    public void onFailure(@NonNull Exception e) {

        int statusCode = ((ApiException) e).getStatusCode();
        switch (statusCode) {
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:

                try {
                    // Show the dialog by calling startResolutionForResult(), and check the
                    // result in onActivityResult().
                    ResolvableApiException rae = (ResolvableApiException) e;
                    rae.startResolutionForResult(LocationActivity.this, REQUEST_CHECK_SETTINGS);
                } catch (IntentSender.SendIntentException sie) {
                    showLocationError();
                }
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                showError();
                break;
        }
    }

问题是,每当调用设置客户端的onFailure并调用startResolution时,它总是陷入Activity.RESULT_CANCELED情况。但奇怪的是,虽然这里说已取消,但几秒钟后GPS就打开了。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        // Check for the integer request code originally supplied to startResolutionForResult().
        case REQUEST_CHECK_SETTINGS:
            switch (resultCode) {
                case Activity.RESULT_OK:
                    // fetch location here
                    break;
                case Activity.RESULT_CANCELED:
                    // this is called immediately first time 
                    // and second time even when GPS is on
                    break;
            }
            break;
    }
}

打开 GPS 后,当我执行相同的操作(获取当前位置)时,SettingsClient 仍然调用 onFailure,并且尽管 GPS 已打开,结果始终为 Activity.RESULT_CANCELED。

问题在 Redmi 4X 和 Motorola Droid Turbo 上重现

还有其他人使用过这种方法的 SettingsClient 并遇到过类似的问题吗?

这是我正在关注的官方示例

官方 GitHub 问题页面也报告了此错误


我发现,当将 PRIORITY_HIGH_ACCURACY 添加到请求时,会发生这种情况,因为位置模式设置为省电模式,因此即使回答肯定打开定位服务(确实已打开),该模式仍然是省电模式无法处理 PRIORITY_HIGH_ACCURACY 请求,因此您会收到 RESULT_CANCELED,表明您的请求未得到满足。我不知道如何请求打开两个定位服务并将模式更改为高精度,因此我只是消除了优先级,因为它对我的用例来说并不那么重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SettingsClient 的位置请求始终为 RESULT_CANCELED 的相关文章

  • Android 上谷歌地图的缩放事件

    我们正在构建一个使用 Android 版谷歌地图 API 的应用程序 我有我的 MapController 和 MapView 并且我使用以下方法启用内置缩放控件 mapView setBuiltInZoomControls true 我现
  • Google 地图 v2 上的动画透明圆圈动画不正确

    我能够在 Android Google Maps v2 上制作基本圆圈的动画 但我想更进一步 我希望动画圈与 Tinders 动画圈类似 这可能吗 例子 http jsfiddle net Y3r36 9 http jsfiddle net
  • Android 全屏对话框片段(如日历应用程序)

    我正在尝试实现如下图所示的全屏对话框 我能够显示全屏对话框 但是当显示对话框时 状态栏颜色变为黑色并且不保留原色深色 这是我的对话片段 public class IconsDialogFragment extends DialogFragm
  • getWidth() 和 getHeight 在 onMeasure() 之后返回零(特定设备)

    我注意到在调用 onMeasure 后 我的应用程序的视图为 getWidth 和 getHeight 返回 0 这种情况只发生在少数设备上 对于大多数 Android 设备 以下代码可以正常工作 我的 checkViewAndLoad 函
  • android以编程方式打开电池设置

    我正在寻找一种从 Android 应用程序打开电池设置屏幕的方法 到目前为止我发现了两个意图 Intent ACTION POWER USAGE SUMMARY Settings ACTION BATTERY SAVER SETTINGS
  • 自定义 AlertDialog - android.R.id.custom 的问题

    我确信我错过了这里的重点 所以我希望有人能解释一下 我想在用户触摸时创建一个弹出窗口ImageView 我看了一下AlertDialog文档说 如果您想显示更复杂的视图 请查找名为 custom 的 FrameLayout 并将您的视图添加
  • 获取TextView的高度

    我有一些文字将被放入TextView 我这样做是使用setText 现在我需要找到文本在文本中占据的行数或高度TextView 我尝试使用getHeight 但它总是返回 0 无论如何 有没有办法获得文本中存在的文本的高度TextView
  • 如何检查应用程序是否违反 Google 的假冒政策

    我的应用程序已从 Google Play 商店中删除 原因如下 经审核 我的应用 有 由于政策罢工而被暂停并从 Google Play 中删除 因为 它违反了假冒政策 有没有其他方法可以在发布之前检查应用程序是否遵守所有 Google 政策
  • Android Fitness API 未从可穿戴传感器读取数据

    我一直在阅读有关 Google Fit API 的内容 特别是传感器 API https developers google com fit android sensors https developers google com fit a
  • 从 Android 模拟器使用 WebView WebGL

    据我了解 WebGL 仅在 Android Lollipop 中的 WebView 更新 Play 商店中的 WebView 组件 和较新版本 无需 Play 商店更新 中受支持 但是 我有一个使用 Android 7 1 1 的模拟器 并
  • 测试奖励广告未显示 - 广告加载失败:LoadAdError(代码:3,域:com.google.android.gms.ads,消息:无广告配置。)

    我目前无法展示测试奖励广告 我正在使用激励广告Sample ad unit ID中提供的doc https developers google com admob android test ads ca app pub 3940256099
  • Paint.setTextSize(float) 使用哪种测量单位?

    我想使用在视图上绘制具有特定高度 以像素为单位 的文本Canvas 你可以简单地使用Paint setTextSize float 与像素数或者这是使用dp or sp 它使用像素 但您可以使用以下代码将其转换为 dp double get
  • 存储 FCM 的令牌

    我正在尝试将我的令牌存储在我的云数据库中 我稍后将在云函数中使用此令牌 以便向已添加为好友的用户发送通知 然而 推送设备令牌不起作用 因为用户未经授权 授权后我无法保存它 因为令牌是在安装应用程序时生成的 private static fi
  • 设置 JAVA_HOME 变量时出现问题

    所以我刚刚下载了 Android Studio 并尝试设置 JAVA HOME 变量以便我可以运行它 我使用的是 Windows 8 并按照我找到的所有说明进行操作 但无济于事 转到高级系统设置 gt 环境变量 然后使用包含我的 jre7
  • Xamarin.Forms 用相机拍照显示方向错误并且后退按钮崩溃

    我正在使用此处的 Xamarin Forms Camera 示例 https github com XForms Xamarin Forms Labs Samples tree master XF Labs CameraSample htt
  • 使用 Nexus 10 在 Android 4.3 上滚动时性能不佳

    我的应用程序有一个带有一些滚动的列表视图 在我测试过的所有手机 Nexus One Nexus 4 和 Galaxy S3 4 上都表现得非常好 以 60fps 滚动 但 Nexus 10 上的表现很糟糕 大概在 15fps 左右 我已经将
  • 在模拟器中启动应用程序后,“React Native run android”立即停止

    我正在尝试测试我的 Android 应用程序 但是当我启动它时react native run android命令在设备上启动后立即停止 不会出现错误 我懂了 This build could be faster please consid
  • Android 2.2 中不带预览的相机捕获

    我需要捕获图像而不显示预览 我想在后台作为服务来完成它 可以这样做吗 是有可能实现的 您应该定义一个处理 Camera 对象的类 例如调用 Camera open 等 不要为相机对象提供以下行以禁用预览 mCamera setPreview
  • 如何隐藏或删除 Android HoneyComb 中的状态栏?

    如何隐藏或删除 Android HoneyComb 中的状态栏 每次运行应用程序时 我都会发现某些内容必须被状态栏覆盖 我尝试改变AndroidManifest xml 但没有任何改变 你不知道 它被认为是永久的屏幕装饰 就像电容式主页 菜
  • 安卓框架?

    是否有任何框架比构建 Android 应用程序更容易 您会对其中一个感兴趣吗 很快就会有 我正在开发 DroidFu 一个 Android 共享库 它将为您提供 活动 和服务 中直接提供大量实用功能 例如生成列表和错误对话框 检查 Inte

随机推荐