gpt4 book ai didi

android - 在 Android 8.1.0 上屏幕关闭时 BLE 扫描不起作用

转载 作者:IT老高 更新时间:2023-10-28 23:10:37 35 4
gpt4 key购买 nike

我正在使用最新的 android 8.1.0 更新的像素。

我遇到了与 BLE 广告扫描相关的问题。每当我关闭屏幕(即按下电源按钮)我的扫描就会停止。 打开屏幕后会立即重启。

我检查了 BLE 的最新代码。 google 新推出了这个功能(Reference Link)。

有什么办法可以跳过这部分,我的意思是无论屏幕打开还是关闭,扫描都不应该停止。

最佳答案

从 Android 8.1 开始,当屏幕关闭时,未过滤蓝牙扫描会被阻止。虽然在 Android 的次要版本中做出如此巨大的变化令人惊讶,但这肯定是基于提交中的评论的预期变化: Stop unfiltered BLE scans when the screen goes off.

解决方法是对所有扫描使用 ScanFilter。新的 8.1 操作系统代码仅验证屏幕关闭时任何 Activity 的扫描是否具有至少一个扫描过滤器。如果满足这些条件,则会像在 Android 8.0.x 及更早版本中一样提供扫描结果。

为了设置这样的扫描,您必须使用 Android 5.0 中引入的 API 并为每次扫描创建一个 ScanFilter。下面是一个过滤器,它可以找到制造商 ID 为 0x004c 的任何 Apple 设备的制造商广告(这将包括 iBeacons):

ScanFilter.Builder builder = new ScanFilter.Builder();
builder.setManufacturerData(0x004c, new byte[] {});
ScanFilter filter = builder.build();

同样,如果您对 GATT 服务广告(例如用于 Eddystone 信标的广告)感兴趣,您可以使用如下过滤器搜索 GATT 服务 UUID:

ScanFilter.Builder builder = new ScanFilter.Builder();
String serviceUuidString = "0000feaa-0000-1000-8000-00805f9b34fb";
String serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
ParcelUuid parcelUuid = ParcelUuid.fromString(serviceUuidString);
ParcelUuid parcelUuidMask = ParcelUuid.fromString(serviceUuidMaskString);
builder.setServiceUuid(parcelUuid, parcelUuidMask);
ScanFilter filter = builder.build();

如果需要,您可以在一次扫描中添加多个过滤器,任何匹配的都会返回结果。这里唯一真正的限制是您必须知道所有制造商代码或您可能预先匹配的所有 GATT 服务 UUID,至少在关闭屏幕进行扫描时是这样。

您使用如下代码开始扫描:

bluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, scanCallback);

编辑: 也可以使用 empty ScanFilter 来执行此操作,如下所示:

ScanFilter.Builder builder = new ScanFilter.Builder();
ScanFilter filter = builder.build();

如果您使用此类扫描过滤器,它将匹配任何广告包,并且在 Android 8.1 上仍允许在屏幕关闭的情况下进行检测,从而在 Android 8.0.x 及更早版本上有效地为您提供相同的行为。

编辑 2:在搭载 Android 8.1 的 Galaxy Note 9 以及其他搭载 8.1 的三星设备上,即使扫描过滤器为空,也会在屏幕关闭的情况下阻止扫描。如上所述,使用非空扫描过滤器在屏幕关闭的情况下允许扫描。

关于android - 在 Android 8.1.0 上屏幕关闭时 BLE 扫描不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48077690/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com