【问题标题】:BLE Bluetooth scanning is not working on Android 10 & 11 due to location permission由于位置许可,BLE 蓝牙扫描无法在 Android 10 和 11 上运行
【发布时间】:2021-07-21 11:28:03
【问题描述】:

我正在研究 BLE 蓝牙扫描正在除 Android 10 和 11 之外的所有设备上工作。更新应用程序后,Android 10 和 11 中的蓝牙扫描无法正常工作。 有时即使在允许位置权限之后,应用程序也必须从应用程序设置中重新授予权限。 为什么这不为人所知,而在现实中总是如此

if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED){ //代码在这里.. }

【问题讨论】:

  • 除了授予权限外,您还必须启用位置扫描
  • 在较新的Android版本中,粗略的位置权限是不够的;你需要好的位置。

标签: android bluetooth-lowenergy


【解决方案1】:

请根据操作系统版本验证是否实现了定位权限检查

  1. Android 8 (≥8):后台应用每小时只能检索几次用户的位置。

  2. 在 Android 10(

  3. Android 10(≥10),后台位置作为独立资源而来。除了前台权限之外,应用程序还必须明确请求此权限。

  4. Android 11(≥11),后台位置权限不能和其他人同时申请。应用程序必须单独请求。此外,请求此权限不会立即提示用户其他权限,而是将用户带到/设置页面/位置权限会话,以便用户可以更新权限级别。

注意:有时当应用程序安装在工作模式配置文件中时,即使我们允许从应用程序设置权限,我们也必须手动启用权限设置

【讨论】:

    【解决方案2】:

    尝试在您的应用启动时使用requestPermissions 实际向用户请求权限:

    // Request location permission, needed for BLE Scan
    ActivityCompat.requestPermissions(this,
        new String[]{
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION},
        2);
    

    您可以在文档的this 页面上找到有关如何更好地处理此事件的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多