【问题标题】:Restrictions when scanning in background on Android 10?在 Android 10 上进行后台扫描时的限制?
【发布时间】:2020-03-29 12:17:44
【问题描述】:

Android 上的蓝牙扫描似乎有很多“隐藏功能”。 对于初学者来说,有一个“30 秒限制”(Android 7.0 ble scan no result)。然后你必须在后台模式下设置一个 ScanFilter 否则你不会得到任何结果(找不到这个的参考)。

最近我发现,当我在 Android 10 上使用以下扫描模式启用扫描并关闭屏幕(大约 30 秒后)时,我没有得到任何扫描结果(我在 Google Pixel 3 和Google Pixel 4,它在较旧的 Android 上运行良好):

/**
 * Perform Bluetooth LE scan in balanced power mode. Scan results are returned at a rate that
 * provides a good trade-off between scan frequency and power consumption.
 */
public static final int SCAN_MODE_BALANCED = 1;

还有另一种扫描模式(我还没试过):

/**
 * Perform Bluetooth LE scan in low power mode. This is the default scan mode as it consumes the
 * least power. This mode is enforced if the scanning application is not in foreground.
*/
public static final int SCAN_MODE_LOW_POWER = 0;

问题:我是否应该将此评论“强制执行”解释为启用使用SCAN_MODE_LOW_POWER 以外的其他内容进行扫描不会给我任何扫描结果?有人可以确认吗?

我会自行进一步调查,但这需要时间......

注意:我有一个前台服务,我可以在 ADB 日志中看到扫描仪定期启用/禁用。但我没有得到任何扫描结果...

更新:我现在确保在后台模式下使用SCAN_MODE_LOW_POWER,但我仍然没有得到任何结果。我不知道发生了什么。

更新 2:我尝试运行旧版本的应用(未针对 Android 10 编译)并且效果很好

更新 3:我禁用了应用的电池优化以防万一。这没有帮助:

  1. 转到设置 > 应用 > 您的应用 > 高级 > 电池 > 电池优化
  2. 将视图更改为所有应用
  3. 搜索您的应用
  4. 选择未优化

【问题讨论】:

    标签: android android-10.0 android-ble google-pixel


    【解决方案1】:

    Android 10 需要新权限才能让 BLE 扫描返回结果。不幸的是,扫描不会返回结果,而是记录警告。新的权限是 ACCESS_FINE_LOCATION,而不是 sdk 版本 23 到 28 所需的 ACCESS_COARSE_LOCATION,如果您需要在应用程序处于后台时执行 BLE 扫描(即使您有前台服务),您将需要 ACCESS_BACKGROUND_LOCATION。您必须在清单中列出这些权限,并在运行时提示用户授予它们。这里有一个类似的问题,答案中有更多信息:Android 10 not working with BLE Bluetooth scanning

    【讨论】:

    • 我可以确认请求“ACCESS_BACKGROUND_LOCATION”权限为我解决了问题
    • 关于 ACCESS_BACKGROUND_LOCATION 的引用:“这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关更多详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。”你可以在这里看到这个:“developer.android.com/reference/android/…
    • 另外,ACCESS_BACKGROUND_LOCATION 不会在 IDE 中识别自己,直到您的目标 SDK 为 29 或更高版本。我想我应该注意到这一点。
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多