gpt4 book ai didi

android - 使用基于广告服务 UUID 的扫描过滤器扫描 BLE 外围设备

转载 作者:行者123 更新时间:2023-12-04 12:38:45 25 4
gpt4 key购买 nike

我有一个自定义的 BLE 外围设备,它会宣传这样的数据:

enter image description here

换句话说,我的 BLE 外围设备在广告服务数据中广告与唯一标识符关联的服务 UUID,但它不会将该服务 UUID 添加到广告服务列表中,因为如果我这样做,我在 BLE 帧中没有空间来需要时添加电池电量。

在 iOS 上,我可以使用基于服务 UUID 的过滤器进行扫描并查看我的外围设备。但在 Android 上,使用以下扫描过滤器,我看不到我的外围设备:

val scanSettingsBuilder = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setReportDelay(0L)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
scanSettingsBuilder
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE)
.setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT)
}
bluetoothAdapter?.bluetoothLeScanner?.startScan(
arrayListOf(ScanFilter.Builder().setServiceUuid(ParcelUuid(UUID.fromString("00004865-726f-6e54-7261-636b2d475053"))).build()),
scanSettingsBuilder.build(),
leScanCallback
)

有没有人有更多关于基于 serviceUUID 的扫描过滤器如何工作的详细信息,以及外围设备必须满足哪些条件才能被过滤器接受?

最佳答案

我想出了如何让它工作......有点。问题是我的过滤器在serviceUuid上,我假设查看的是在 advertisedServices 中宣传 UUID 的外围设备收藏。我的外围设备仅将 UUID 作为其 serviceData 中的键进行宣传。关联数组,所以我切换到 serviceData过滤如下,现在我可以找到我的外围设备:

AsyncTask.execute {
val scanFilters = Settings.scannedBleServices.values.map {
ScanFilter.Builder().setServiceData(it, null).build()
}
val scanSettingsBuilder = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setReportDelay(0L)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
scanSettingsBuilder
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE)
.setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT)
}
bluetoothAdapter?.bluetoothLeScanner?.startScan(
scanFilters,
scanSettingsBuilder.build(),
leScanCallback
)
}

问题是现在过滤器太宽松了,因为我得到了周围每个外围设备的回调,即使是那些没有任何 serviceData 的外围设备。 ,就像我根本没有指定过滤器一样。可能是因为我通过了 null作为 setServiceData 的第二个参数在过滤器中,因为我不知道还要在那里添加什么。和 documentation并不完全有帮助。

我的猜测是扫描在后台工作就足够了(我还没有尝试过),但如果我可以限制回调被调用的次数并且我不必过滤我。

关于android - 使用基于广告服务 UUID 的扫描过滤器扫描 BLE 外围设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58731684/

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