gpt4 book ai didi

java - 安卓 BLE。是否可以使用正则表达式作为过滤器来扫描 Mac 地址?

转载 作者:行者123 更新时间:2023-12-05 00:20:21 31 4
gpt4 key购买 nike

我必须构建一个扫描 BLE 设备的应用程序,并返回它的数据。
除非我使用过滤器,否则设备不会在扫描时显示。

UUID 不是一个选项,并且设备不会广播它的名称(使用 nrfConnect 扫描时显示 N/A 。

我正在尝试通过 MAC 地址对其进行扫描。但是,我不知道 MAC 地址,因为它可以是任何同类设备,所以应用程序以前不会知道设备的 MAC 地址。

我已经知道设备的地址上有一个前缀 F8:36:9B .事情是后缀。我如何(如果可能的话)制作一个正则表达式作为参数传递以查找设备 MAC 地址的所有可能匹配项?

正则表达式本身,我有,([A-Fa-f0-9]{2}:){2}[A-Fa-f0-9]{2} ,我从 Android Bluetooth ScanFilter Partial String Matching 得到.

我只是不知道如何在scanFilter上实现它。

ScanFilter filterMac = new ScanFilter.Builder().setDeviceAddress(/**THE_SUFIX_AND_REGEX*/).build();

可能吗?如果是,那怎么办?

我尝试了一切,我得到这个错误:

Error: invalid device address



我尝试使用 for 生成所有可能的匹配项循环并将其保存到 ArrayList ,然后将其添加到过滤器列表中,但我得到 OutOfMemoryException ,因为结果是超过 1600 万种可能性。

最佳答案

经过一番挣扎,我找到了解决问题的方法。
它本身并不能回答问题,即是否可以使用正则表达式作为过滤器来扫描 MAC 地址。
但是,我设法正确扫描了我需要的设备。
这就是我所做的:

首先,我按名称做了一个过滤器。是的,名称,设备没有名称。所以我不得不想...如果我按名称过滤,扫描设备 name == null ?

private List<ScanFilter> scanFilters() {
List<ScanFilter> list = new ArrayList<ScanFilter>();

ScanFilter scanFilterName = new ScanFilter.Builder().setDeviceName(null).build();

list.add(scanFilterName);

return list;
}

嗯,它奏效了!但是,它不仅返回了我需要的设备,还返回了许多其他设备,以及它们。我的扫描一团糟,那么如何改进过滤器以只给我需要的那些?
第二个过滤器(不在上面的 scanFilters() 方法上,它在 scanResult 上),是通过 MAC 地址前缀(这与我的设备相同)。
private Set<String> btDevice = new LinkedHashSet<String>();

private ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {

BluetoothDevice device = result.getDevice();

ScanRecord record = result.getScanRecord();
byte[] dataByteArray = record.getBytes();

if (device.getAddress().startsWith("F8:36:9B")) {
btDevice.add(device.getAddress());
}
}
};

瞧,我只用我需要的设备进行了扫描。
我仍然想知道主要问题是否可能,即我们是否可以在 scanFilter() 上使用正则表达式, 过滤一系列内容(在本例中为 MAC 地址)。因此,如果有人对此有解决方案,请随时回答。
谢谢!

关于java - 安卓 BLE。是否可以使用正则表达式作为过滤器来扫描 Mac 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60082391/

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