une*_*red 5 android bluetooth-lowenergy
有关ScanSettings的文档非常简洁,我很难提出最佳配置。
根据我的要求,我应该尽快报告一个符合我的过滤条件(根据服务UUID过滤)的新广告包。重复的广告包对我没有用。当外设在其一侧注册事件时,广告包将发生更改,因此广告包为我提供了机会来检测更改并采取相应措施。我还需要知道外围设备何时停止广告(关闭电源或不在范围内)。
我试图设置如下的回调类型:
setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH | ScanSettings.CALLBACK_TYPE_MATCH_LOST)
Run Code Online (Sandbox Code Playgroud)
此参数的文档说:
整型CALLBACK_TYPE_ALL_MATCHES
为找到的每个符合过滤条件的蓝牙广告触发回调。如果没有活动的过滤器,则报告所有广告包。
诠释CALLBACK_TYPE_FIRST_MATCH
仅针对接收到的与过滤条件匹配的第一个广告包触发结果回调。
诠释CALLBACK_TYPE_MATCH_LOST
当不再从以前由首次匹配回调报告的设备接收广告时,接收回调。
我希望借此在外围设备可用时得到通知,然后在外围设备丢失时得到通知。但是,这不会触发任何扫描结果,至少不会在我的Pixel 2上触发。因此,我刚刚切换为使用CALLBACK_TYPE_ALL_MATCHES,现在我得到了所有广告包。无论如何,如果我想从同一外设获取更新的数据包,这可能就是我想要的。
我看了看setMatchMode参数,看来这仅根据信号强度配置回调率:
整数MATCH_MODE_AGGRESSIVE
在激进模式下,即使信号强度微弱且持续时间内瞄准/匹配的次数很少,hw也会更快地确定匹配。
整数MATCH_MODE_STICKY
对于粘性模式,在通过硬件报告之前,需要更高的信号强度和目击阈值
该setNumOfMatches索赔处理每个过滤广告的数量,但没有形成文件的参数似乎有所作为,我还是得到同样的外围包并没有改变,看似在大约相同的速率无论参数一阵。
为了满足我需要确定外围设备是否停止广告(电源关闭或不在范围内)的要求,我想出了外围设备上次见到的数据包的时间戳,并确定外围设备是否丢失。几秒钟内看不到一个数据包。这是必要的,因为CALLBACK_TYPE_FIRST_MATCH和CALLBACK_TYPE_MATCH_LOST似乎根本不起作用。
不幸的是,这意味着我收到大量类似的数据包,从而触发了我现在必须处理的代码中的连锁反应。
如何配置扫描,以便仅在广告包更改或外围设备停止广告时才得到通知?我在这里错过了什么吗,还是那是不可能的。
小智 -1
设置代码如下:
new ScanSettings.Builder ()
.setScanMode (ScanSettings.SCAN_MODE_BALANCED)
.setCallbackType (ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.build (),...
Run Code Online (Sandbox Code Playgroud)
此设置适用于所有设备。但每部智能手机都会给你带来不同的错误,这会导致混乱。
| 归档时间: |
|
| 查看次数: |
559 次 |
| 最近记录: |