当前位置:  开发笔记 > Android > 正文

Android Marshmallow ScanSetting

如何解决《AndroidMarshmallowScanSetting》经验,为你挑选了0个好方法。

我想在Android M中构建我的扫描设置,以便在一个ScanCallback对象中为三个不同的事件获得单独的回调:

    当远程设备首次匹配过滤器时

    当Android手机在第一次发现后收到广告时(在这种情况下,我正在检查广告数据是否已更改)

    当远程设备超出范围时

API中有三个选项:

CALLBACK_TYPE_ALL_MATCHES  
CALLBACK_TYPE_FIRST_MATCH  
CALLBACK_TYPE_MATCH_LOST 

遗憾的是,没有一个关于这三个选项是否可以一起使用的良好文档.根据我的实验,我应该只选择其中一个.API是否离我们需要分开同时进行扫描,以获取回调CALLBACK_TYPE_ALL_MATCHES ,并CALLBACK_TYPE_MATCH_LOST在同一时间?有没有人对如何使用这些选项有任何好的经验?

编辑:

检查API源代码后,我发现这CALLBACK_TYPE_FIRST_MATCH | CALLBACK_TYPE_MATCH_LOST也是一个有效的组合.然而,CALLBACK_TYPE_FIRST_MATCH与之相比,使用它会使发现明显变慢(~30秒)CALLBACK_TYPE_ALL_MATCHES.此外,CALLBACK_TYPE_MATCH_LOST尽管该设备正在积极地进行广告宣传.我不认为这个API是可靠的.

这是我的结果:

12:02:50.179 31627-31655 D/BluetoothLeScanner:onClientRegistered() - status = 0 clientIf = 6
12:03:24.877 31627-31627 D/ScanCallbackMarshmallow:ScanResult {mDevice = E8:A8:C9:82:17:61, ...}
12:03:24.878 31627-31627 D/ScanCallbackMarshmallow:CALLBACK_TYPE_FIRST_MATCH
12:03:29.905 31627-31627 D/ScanCallbackMarshmallow:ScanResult {mDevice = C0:B6:43:1E:45:28,...}
12 :03:29.906 31627-31627 D/ScanCallbackMarshmallow:CALLBACK_TYPE_FIRST_MATCH
12:03:39.721 31627-31627 D/ScanCallbackMarshmallow:ScanResult {mDevice = D8:35:26:9D:55:B4,...}
12:03:39.722 31627 -31627 D/ScanCallbackMarshmallow:CALLBACK_TYPE_FIRST_MATCH

12:04:21.889 718-730 D/BluetoothLeScanner:onClientRegistered() - status = 0 clientIf = 6 12:04:22.073 718-718 D/ScanCallbackMarshmallow:ScanResult {mDevice = D8:35:26:9D:55:B4, ...} 12:04:22.073 718-718 D/ScanCallbackMarshmallow:CALLBACK_TYPE_ALL_MATCHES 12:04:22.316 718-718 D/ScanCallbackMarshmallow:ScanResult {mDevice = E8:A8:C9:82:17:61,...} 12 :04:22.316 718-718 D/ScanCallbackMarshmallow:CALLBACK_TYPE_ALL_MATCHES 12:04:24.740 718-718 D/ScanCallbackMarshmallow:ScanResult {mDevice = E8:A8:C9:82:17:61,...} 12:04:24.740 718 -718 D/ScanCallbackMarshmallow:CALLBACK_TYPE_ALL_MATCHES

编辑2:

将扫描模式设置为ScanSettings.SCAN_MODE_LOW_LATENCY使用CALLBACK_TYPE_FIRST_MATCH尽可能快的发现CALLBACK_TYPE_ALL_MATCHES.但是,如果我设置回调类型,因为ScanSettings.CALLBACK_TYPE_FIRST_MATCH | ScanSettings.CALLBACK_TYPE_MATCH_LOST如果广告数据是动态的,我将无法检查广告数据是否已经改变.我认为这是API的问题.应该注意,广告数据是不可预测的,因此我不能基于其内容过滤广告数据.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有