Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用正则表达式按名称筛选可扩展设备?_Java_Android_Android Studio_Bluetooth_Bluetooth Lowenergy - Fatal编程技术网

Java 如何使用正则表达式按名称筛选可扩展设备?

Java 如何使用正则表达式按名称筛选可扩展设备?,java,android,android-studio,bluetooth,bluetooth-lowenergy,Java,Android,Android Studio,Bluetooth,Bluetooth Lowenergy,我在做一个很好的项目。我需要显示可用的设备,其中有“kdd_”在开始。我对正则表达式不太熟悉。有人知道如何使用正则表达式过滤设备吗?过滤设备的任何其他可能的解决方案也可以。我在下面附上了ble扫描代码的代码 final BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner(); final ScanSettings settings = new ScanSettings.Builder()

我在做一个很好的项目。我需要显示可用的设备,其中有“kdd_”在开始。我对正则表达式不太熟悉。有人知道如何使用正则表达式过滤设备吗?过滤设备的任何其他可能的解决方案也可以。我在下面附上了ble扫描代码的代码

final BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
        final ScanSettings settings = new ScanSettings.Builder()
                .setLegacy(false)
                .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(1000).setUseHardwareBatchingIfSupported(false).build();
        final List<ScanFilter> filters = new ArrayList<>();
        filters.add(new ScanFilter.Builder().build());
        scanner.startScan(filters, settings, scanCallback);
final BluetoothLeScannerCompat scanner=BluetoothLeScannerCompat.getScanner();
最终扫描设置=新建扫描设置.Builder()
.setLegacy(错误)
.setScanMode(扫描设置.SCAN_MODE_LOW_LATENCY).setReportDelay(1000).SetUseHardwareBatchingSupported(false).build();
最终列表过滤器=新的ArrayList();
filters.add(新的ScanFilter.Builder().build());
scanner.startScan(过滤器、设置、扫描回调);

tl;dr你不能

更详细的回答:确实列出了一些可以过滤的属性,其中包括“远程蓝牙设备的名称”

如果查看
公共布尔匹配(ScanResult ScanResult)
方法,您可以看到

// Local name match.
if (mDeviceName != null && !mDeviceName.equals(scanRecord.getDeviceName())) {
    return false;
}
如果你想过滤名字,你只能进行全名匹配。对于其他字段,可能存在部分匹配,但随后使用例如
BitUtils.maskedEquals
,而不是任何正则表达式逻辑对其进行比较

您不能将
ScanFilter
子类化以创建自己的筛选器逻辑,因为该类是
final


这意味着逻辑不存在,您不能添加它=>您不能基于正则表达式进行筛选。

您可能不能。至少不能使用
ScanFilter
s,您只能在检索后手动过滤数据/搜索结果,并手动应用正则表达式过滤器。我们可以使用ScanFilter.Builder().setDeviceName(“regex”).build()进行过滤。我要问的是,如何在setDeviceName()函数中传递正则表达式。我知道。回答:你不能。好的,谢谢……请参阅我的答案,了解更多关于为什么会出现这种情况的详细信息。好的,谢谢。我将在显示时进行过滤。