Android LocationServices.checkLocationSettings 误报结果

2024-03-02

目前受影响的设备:

  • Xperia 1 II
  • 小米红米Note 7

Use:为了请求位置更新,我检查位置设置 事先就足够了。如果没有,我会显示一条小文字,表明服务必须 为我的功能启用。如果用户单击它,系统对话框将启用 会提示定位服务。

我如何运行检查:我检查完毕LocationSettingsRequest and LocationServices和 处理ResolvableApiException。如果用户禁用该服务, 然后在我的所有设备上,这将显示系统对话框,要求用户启用 服务(并启用它,如果单击“确定”)。

Redmi 上会发生什么:但不管出于什么原因,在红米Note 7上,checkLocationSettings will always返回一个ResolvableApiException,即使服务 已经启用。对话won't出现并直接返回阳性结果 (当然,因为该服务已启用)。 因此,用户被卡住并永远单击“启用”。

有人知道为什么LocationSettingsRequest不管用 正确地安装在这些设备上并知道如何修复它?

示例代码片段

void enableLocationSettings(onLocationServiceRequiredCallback: ICallback) {
   LocationRequest locationRequest = LocationRequest.create()
         .setInterval(LOCATION_UPDATE_INTERVAL)
         .setExpirationDuration(LOCATION_UPDATE_EXPIRATION_DURATION)
         .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);

    LocationServices
            .getSettingsClient(this)
            .checkLocationSettings(builder.build())
            .addOnSuccessListener(this, (LocationSettingsResponse response) -> {
                // update location as usual
            })
            .addOnFailureListener(this, error -> {
                if (error instanceOf ApiException) {
                    int statusCode = error.statusCode;
                    if(statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED) {
                        if(error instanceOf ResolvableApiException) {
                            PendingIntent resolution = error.resolution 
             // This will trigger the system dialog, see below
                            onLocationServiceRequiredCallback(resolution);
                        }
                    }
                }
                // error callback
            });  

 

不幸的是,回调的代码现在将是 kotlin。对此感到抱歉。我只能发布“示例代码片段”,因为这是与工作相关的。

It uses ActivityResultContracts.StartIntentSenderForResult开始 系统对话框。

resolution是上面的 PendingIntent。

合同:

private val locationServiceContract = registerForActivityResult(
    ActivityResultContracts.StartIntentSenderForResult()
) { activityResult ->
    lifecycleScope.launchWhenResumed {
        val result = if (activityResult.resultCode == Activity.RESULT_OK) {
            // This will retrigger the location fetch (looping)
            enableLocationSettings(...) 
        } else {
            // Do nothing
        }
    }
}

调用上面的回调后,将执行:

        locationServiceContract.launch(
            IntentSenderRequest.Builder(
                resolution
            ).build()
        )

Dump of LocationSettingsStates,使用已弃用的 LocationSettings API(使用 GoogleApiClient)获取:

isGpsPresent: true, 
isGpsUsable: false, 
isLocationPresent: true, 
isLocationUsable: true, 
isNetworkLocationPresent: true, 
isNetworkLocationUsable: true 

您好,我使用不同的代码来检查设备上是否启用了 GPS。也许值得您尝试一下,看看它是否可以解决您的问题。

 private boolean isLocationEnabled(Context context) {
        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        return LocationManagerCompat.isLocationEnabled(locationManager);
    }

然后,我使用以下命令通过对话框将用户发送到设置

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
context.startActivity(intent);

我敢打赌你也在做同样的事情。在发送用户启用 GPS 后,您可以在恢复时再次运行该方法

让我知道这是否有帮助

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

Android LocationServices.checkLocationSettings 误报结果 的相关文章

随机推荐

  • iOS 验证得到 Main_iPhone~iphone.storyboardc 未找到

    我正在尝试分发我的 iOS 应用程序 在 xCode 验证期间收到以下错误消息 未找到故事板文件 Main iPhone iphone storyboardc 请确保指定的文件包含在捆绑包中 并在文件名后附加任何所需的设备修饰符 需要一些建
  • 计算数据框中主题标签的频率

    我正在尝试计算数据框 文本 列中主题标签词的频率 index text 1 ello ello ello ello hello ello 2 red green blue black colours 3 Season greetings h
  • 如何使我的表单始终位于主表单之上?

    如何使我的非模态表单始终位于主表单之上 我努力了 procedure TForm3 CreateParams var Params TCreateParams begin inherited CreateParams Params Para
  • Prolog 中的选择排序

    我是 Prolog 的新手 我正在尝试进行选择排序 这是我所拥有的 ssort ssort M S L min M L remove M L N ssort S N min M M min M H T min N T min2 M H N
  • 如何在 Flutter App 上自动增加内部版本号?

    目前 每次我构建 APK 时 我都需要在 2 个位置手动更新我的构建版本 这看起来非常不自动化且违反直觉 我将其与 Jenkins BUILD ID 进行比较 我知道我必须 并且更喜欢这样 手动更新 semver 版本 0 2 0 但肯定有
  • iOS 上运行的问题

    我已经在 3 台不同的计算机上进行了尝试 但仍然存在相同的问题 导致我无法在 Mac 上运行该项目 当我使用 Windows 并连接到 Mac 来运行时 所有 3 台计算机上都显示相同的错误 显示的错误消息 无法解析参考 Library F
  • Visual Studio 2013 对项目中所有引用的黄色警告

    我有一个 C 项目 目标框架设置为 NET 4 5 由于某些奇怪的原因 所有引用都标有黄色警告三角形 如下所示 我尝试过卸载并重新加载该项目 我什至尝试手动重新添加系统引用之一 但无济于事 我收到的警告是 警告 13 无法找到引用的组件 A
  • Java 中的目录扫描器

    连续扫描一组目录以查找一组文件名过滤器 对于到达的每个文件名过滤器 处理该文件并对所有文件重复这些步骤 jdk 1 5 中推荐的设计是什么 可能使用 java concurrent Executor 和 Future 我已经用网络爬虫完成了
  • 在同一模块中使用unittest.mock的补丁,通过“__main__.imported_obj”修补时得到“没有该属性”

    我的任务本来应该很简单 但它却困扰了我一段时间 我在尝试着patch导入到当前模块中的对象 根据答案Python 中的模拟修补 from import 语句 https stackoverflow com questions 1135138
  • jQuery:计算可见元素 - 效率/速度问题

    我有一些代码可以正常工作 但它变得太慢了 HTML 我有一个容器 里面大约有 50 个ul元素 每个ul元素有一个h4标题后面跟着一系列li元素 如果没有可见的行元素 该函数将隐藏标题 JavaScript jQuery function
  • 允许 AWS Lambda 访问 RDS 数据库

    我正在尝试从 AWS Lambda Java 连接到 RDS 数据库 我应该从 RDS 安全组规则中启用哪个 IP 您无法通过 IP 启用此功能 首先 您需要为 Lambda 函数启用 VPC 访问 在此期间您将为其分配一个安全组 然后 在
  • Ansible 使用同步时提示密码

    我在用着ansible http www ansible com通过以下方式 ansible playbook f 1 my play book yaml ask pass ask sudo pass 之后我被要求输入 ssh 和 sudo
  • 无法加载资源:服务器响应 404(未找到)css 状态

    我无法让浏览器显示我正在创建的应用程序的 css 我查看了其他用户提出的相同问题 但没有找到任何对我的情况有帮助的答案 当我进入该页面时 显示的只是 Hello world 没有样式 即使样式表已链接 当我检查页面时 出现错误 无法加载资源
  • MVC 中 SelectlistItem 的自定义属性

    我想为 dropdownlist 创建一个自定义 htmlhelper 扩展方法 以接受 selectlistitem 的 Option 标签中的自定义属性 我的模型类中有一个属性 我想将其作为属性包含在选择列表的选项标记中 i e
  • MVC Mini Profiler 不尊重应用程序的路径

    我已经按照其描述设置了 MVC Mini Profiler项目页面 http code google com p mvc mini profiler 并且包含内容确实被写在页面上 问题是 我的应用程序位于http localhost 808
  • 在 AWS Ubuntu 14.04.1 LTS 上安装 Sublime Text 3

    Sublime text 是适用于 Windows 和 Linux 的快速编辑器 http www sublimetext com 我无法使用以下命令在 AWS Ubuntu 14 04 1 LTS 上安装 sublime text 3 s
  • 测量 wifi 到 Iphone/Ipad 的信号强度

    我想从 iOS 设备获取当前的 Wifi 信号强度 Google 搜索仅显示适用于 Android 设备的解决方案 从文献中我了解到 Apple 不允许访问硬件 因此没有人可以通过他们的应用程序以 dbm 形式检索设备的信号强度 它是否正确
  • Spring Batch- ItemWriter - DataIntegrityViolationException - 跳过记录 - 重试 - 不起作用

    我从某个时候就被这个问题困扰了 我正在使用 spring batch 3 0 7 问题是如果org springframework dao DataIntegrityViolationException在 ItemWriter 中的一条记录
  • Python/ Pandas:找到左右最大值

    我有一个 pandas 数据框 第一列中有一个区域 其余部分有 8 年的季度数据 大约有 4400 行 这是一个示例 idx Q12000 Q22000 Q32000 Q42000 Q12001 Q22001 Q32001 Q42001 Q
  • Android LocationServices.checkLocationSettings 误报结果

    目前受影响的设备 Xperia 1 II 小米红米Note 7 Use 为了请求位置更新 我检查位置设置 事先就足够了 如果没有 我会显示一条小文字 表明服务必须 为我的功能启用 如果用户单击它 系统对话框将启用 会提示定位服务 我如何运行