当前位置: 首页 > 知识库问答 >
问题:

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

凤财
2023-03-14

我必须建立一个应用程序,扫描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部分字符串匹配中得到的。

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

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

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

我尝试过的所有内容,我都收到此错误:

错误:无效的设备地址

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

共有2个答案

山疏珂
2023-03-14

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

首先,我按名称制作了一个过滤器。是,名称,设备没有名称。因此,我不得不思考……如果我按名称过滤,以扫描<code>name==null</code>的设备,该怎么办?

private List<ScanFilter> scanFilters() {
    List<ScanFilter> list = new ArrayList<ScanFilter>();
    
    ScanFilter scanFilterName = new ScanFilter.Builder().setDeviceName(null).build();
    
    list.add(scanFilterName);
    
    return list;
}

嗯,它起作用了!但是,它不仅还给了我所需要的设备,而且还给了我大量的其他设备。我的扫描很混乱,所以如何改进过滤器,只给我需要的?第二个过滤器(不在上面的<code>scanFilters()中)是通过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());
        }
    }
};

瞧,我只扫描了我需要的设备。我仍然想知道主要问题是否可行,即我们是否可以在<code>scanFilter()

郜光明
2023-03-14

过滤器是不可能的。你必须过滤自己...就像你已经做的那样

 类似资料:
  • 问题内容: 假设我要使用SCAN功能扫描Redis中的集合。是否可以将正则表达式传递给MATCH? 问题答案: 不,是仅支持通配符的模式。

  • 第一篇文章是关于Stack的,对于使用Python和DynamoDB编程来说,这是相当新的,但是我只是想在我的表上运行一个扫描,根据两个预定义的属性返回结果。 ---这是我的Python代码片段--- 我的发电机有4个磁场。 ID 日期 班次 安全 现在关于这个问题,在运行时,我得到了两个返回的表条目,而我应该只得到第一个条目...根据我的扫描标准,有“没有安全问题”的那个。 ---这是我的Dyn

  • 我正在Android(移动设备a)上执行UUID过滤扫描,我有两个测试用例。 一个人在另一个Android设备(移动设备b)上使用一个名为BLE扫描仪的应用程序来创建一个具有两个测试服务的BLE服务器(每个服务都有自己唯一的UUID)。另一种是通过Arduino BLE服务器,为其服务定制UUID。 如果我使用移动设备B的BLE扫描仪应用程序并扫描arduino,我可以找到它,连接到它并查看服务以

  • 问题内容: 我在为ElasticSearch Regexp Filter正确表达正则表达式时遇到问题。我正在尝试匹配url字段中“ info-for / media”中的任何内容,例如http://mydomain.co.uk/info-for/media/press- release-1 。为了尝试正确使用我现在使用的正则表达式,但这最终将与用户的查询字符串一起使用。 POST到localhos

  • 我知道除了扫描预定义的< code >原语类型,我还可以扫描自己的用户定义模式,这在扫描更复杂的数据时很有帮助。我说的是< code > scanner . next(String pattern)方法。然而,在我读过的关于Java的书中,有一段说 “使用正则表达式进行扫描时有一个警告。该模式仅与下一个输入令牌匹配,因此,如果您的模式包含分隔符,则永远不会匹配。 我不太明白这是什么意思,在哪些情况

  • 问题内容: 我想获取所有具有与某些正则表达式匹配的文本的div / links / ..的xpath计数。例如: 我希望能够致电: 并使其返回2。(当然,这是一个简单的示例,我想使用各种正则表达式) 这可能吗,怎么办? 问题答案: 使用允许您使用javascript 的协议。而javascript具有regexp: