【发布时间】:2020-02-06 13:36:20
【问题描述】:
我必须构建一个 Android 应用程序,该应用程序在一种设备上读取信息,该设备仅在过滤后才会在扫描时显示(一般扫描不会显示)。该设备类似于信标,因此它只发布数据,其中包含我想要的广告信息(它不可连接)。 制造商给我的过滤器是原始数据。即:
0x02010612435542
我无法按名称过滤它,因为该设备不会宣传它的名称。我也不能通过MAC Address 进行操作,因为该应用程序以前不会知道设备的地址(它将是许多此类设备)。
nrfConnect 应用程序做得很好,如下所示:
App 上的过滤器名称为:
按原始广告数据过滤
而且,当被过滤时,这就是设备在应用程序上的显示方式:
所以,事情就是这样。我无法按名称或MAC Address 过滤。
Java(android/ble 标准库)中用于过滤的其他选项有:
ScanFilter scanFilter1 = new ScanFilter.Builder().setManufacturerData(manufacturerId, manufacturerData).build();
ScanFilter scanFilter2 = new ScanFilter.Builder().setServiceData(serviceDataUuid, serviceData).build();
ScanFilter scanFilter2 = new ScanFilter.Builder().setServiceUuid(serviceUuid).build();
我有制造商提供的 UUID。这是
B54ADC00-67F9-11D9-9669-0800200C9A66
但是,正如制造商所说,UUID 用于扫描 iOS,无法在 Android 上运行(经过测试,确实如此)。
所以,我剩下上面的 scanFilters 的 2 个选项。
我有这样的知识:“制造商数据在原始广告数据中进行广告,可以通过 nrfConnect 应用程序找到。制造商数据的前两个字节是制造商 ID,与 setManufacturerData() 一起使用筛选”。
我什至能够检索原始制造商广告数据(使用setDeviceAddress() 过滤器(用于测试,使用测试设备,因为正如我所说,应用程序以前不会知道 MACAddresses),我得到了类似这样的东西:
0X020106124355420000080390BECB49400400CB500CF
很抱歉这个问题太长了,但我尽量做到最完整。
我已经尝试了所有可以使用这些 scanFilter 方法的方法,但无法让它发挥作用。
有人知道如何实现吗?我为此疯狂了一个多月。
提前致谢!
【问题讨论】:
标签: java android bluetooth-lowenergy