Android蓝牙。是否可以使用正则表达式作为过滤器来扫描 Mac 地址?

Android BLE. Is it possible to use a regex as a filter to scan for Mac Address?

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

UUID 不是一个选项,设备不会广播它的名称(使用 nrfConnect.

扫描时显示 N/A

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

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

正则表达式本身,我有,([A-Fa-f0-9]{2}:){2}[A-Fa-f0-9]{2},我从 .

得到的

我只是不知道如何在 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 地址)。因此,如果有人对此有解决方案,请随时回答。 谢谢!

无法使用过滤器。你必须过滤自己......就像你已经做的那样