gpt4 book ai didi

android - 有没有一种方法可以在 flutter 中实现一种像信标一样的蓝牙广播?

转载 作者:行者123 更新时间:2023-12-04 23:55:18 27 4
gpt4 key购买 nike

我想知道如何为 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 项目中使用 native 代码。

非常感谢。

编辑 1:我们现在需要找到两个 Flutter 库,以便使用 AltBeacon 布局同时发送和接收所有类型的信标。这不是微不足道的,因为事实证明其他开发人员奇怪地实现了通信的一侧而不是两者。此外,很难找到“内置电池”(即开箱即用)的图书馆。

编辑 2: 突发新闻!我结合了两个 flutter 库,特别是 flutter_beaconbeacon_broadcast。现在,请帮助我解决以下问题:我可以接收信标,开始转换广告,但不能同时进行。

我也不知道我哪里出错了,反正先看这里:

我用来扫描信标的代码如下:

  Future<void> beacon() async {

await flutterBeacon.initializeScanning;

final regions = <Region>[];

// Android platform, it can ranging out of beacon that filter all of Proximity UUID
regions.add(Region(identifier: 'unito'));

// to start monitoring beacons
var _streamRanging = flutterBeacon.ranging(regions).listen((RangingResult result) {
// result contains a region, event type and event state
print(result);
print(result.toJson);
print(result.beacons.toString());
});
}

调试控制台显示如下内容:

When i turn on scanning

但是,不幸的是,如果我也激活 BLE 广告,什么也不会发生:

When i turn on advertising

那么,有什么建议吗?当我分别使用一个设备进行扫描和另一个设备进行广告时,它可以工作...

最佳答案

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

例如在你的问题中你有这个标识符:

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

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

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

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

我写了您引用的博客文章,并且通常在 Swift 或 Kotlin 中以原生方式完成所有工作,但如果您能找到允许您传输和接收 BLE 广告数据包的模块,那么您没有理由不能使用 Flutter 来执行此操作。这些可以是原始广告或信标格式,例如您可以重新解释的 AltBeacon 或 Eddystone。

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

如果你能找到 flutter 的包,让你可以在发送端和接收端根据这些表达式设置布局,你的工作就差不多完成了。否则,您只需手动重新编码。

关于android - 有没有一种方法可以在 flutter 中实现一种像信标一样的蓝牙广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61930503/

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