有没有一种方法可以像信标一样在颤振中实现某种蓝牙广播?

问题描述 投票:0回答:2

我想知道如何为Flutter应用程序实现某种“蓝牙广播”(使用低功耗蓝牙)。我特别希望达到以下几点:

  • 我想使用蓝牙“在空中”发送随机字符串和整数。
  • 我还希望能够通过其他设备接收那些数据
  • 该应用程序必须能够同时发送和接收

现在,我从pub.dev中检查了一些信标库(例如thisthis,但事实证明,我可能不明白这些库是否以及如何帮助我。

例如,让我们考虑beacon_broadcast库:

创建信标的建议代码如下:

beaconBroadcast
  .setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
  .setMajorId(1)
  .setMinorId(100)
  .setTransmissionPower(-59) //optional
  .setIdentifier('com.example.myDeviceRegion') //iOS-only, optional
  .setLayout('s:0-1=feaa,m:2-2=10,p:3-3:-41,i:4-21v') //Android-only, optional
  .setManufacturerId(0x001D) //Android-only, optional
  .start();

但是我有点困惑。我想了解如何发送自定义数据(一个简单的字符串和一个更简单的整数)。在接收方,我想获取所有具有特定布局的信标,而不仅仅是与特定UUID匹配的信标。

类似于我想要实现的目标,可以找到here,但它是由kotlin制造的。如果您认为这与我需要的东西最接近,请建议我如何在flutter项目中使用本机代码。

非常感谢。

android flutter bluetooth android-bluetooth beacon
2个回答
0
投票

实际上,您应该将其与以下软件包一起使用:https://pub.dev/packages/flutter_blue

从另一个应用程序项目中,我知道这是高度可定制的。

设置通知并收听更改#

await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
    // do something with new value
});

我提供的链接中的完整文档。您可以读写,连接服务并收听所需的各种通知。


0
投票

发送自定义数据是编码问题。信标标识符只是对蓝牙数据包中一系列字节的解释。您可以根据需要安全地重新解释这些字节,从而重新使用所需的任何信标格式。

例如,在您的问题中,您具有此标识符:

39ED98FF-2900-441A-802F-9C398FC199D2

为什么不将其重新解释为一系列的16位整数?

39ED, 98FF, 2900, 441A, 802F, 9C39, 8FC1, 99D2

您还可以将字符串编码为字节流。例如,Eddystone-URL是一种将URL编码到Bluetooth字节数组中的格式。

我写了您引用的博客文章,并且通常都可以在Swift或Kotlin上完成所有工作,但是如果找到可以发送和接收BLE广告数据包的模块,就没有理由不能使用Flutter进行此操作。这些可以是原始广告,也可以是信标格式,例如AltBeacon或Eddystone,可以重新解释。

问题中的示例显示了信标布局。这是一个简短的表达式,显示了如何将字节序列解释为特定长度的标识符数组。首次编写Android Beacon库时,我创建了beacon layout expressions的概念。这些是简短的字符串,可让您简洁地定义如何对信标数据包中的字节进行编码和解码。

[如果您找到了用于flutter的程序包,可以在发送和接收端基于这些表达式来设置布局,那么您的工作就快完成了。否则,您只需要手动重新编码即可。

© www.soinside.com 2019 - 2024. All rights reserved.