Beacon Broadcast 插件,用于 Flutter

一个 Flutter 插件,用于将您的设备变成信标。

用法

要使用此插件,请将 beacon_broadcast 添加到您的 pubspec.yaml 文件中作为依赖项,并导入
文件。

import 'package:beacon_broadcast/beacon_broadcast.dart';

现在您可以创建 BeaconBroadcast 对象并开始使用它了。

重要提示:对于 Android 应用,用户需要首先打开设备上的蓝牙

BeaconBroadcast beaconBroadcast = BeaconBroadcast();

在最简单的情况下,要开始广播,只需设置您的 UUID、major 和 minor
ID,然后调用 start()

beaconBroadcast
    .setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
    .setMajorId(1)
    .setMinorId(100)
    .start();

您也可以在开始之前自定义您的信标。

beaconBroadcast
    .setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
    .setMajorId(1)
    .setMinorId(100)
    .setTransmissionPower(-59) //optional
    .setAdvertiseMode(AdvertiseMode.lowPower) //Android-only, 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();

您可以检查信标广播状态的当前状态。

bool isAdvertising = await beaconBroadcast.isAdvertising()

您还可以监听信标广播状态的变化。

beaconBroadcast.getAdvertisingStateChange().listen((isAdvertising) {
    // Now you know if beacon is advertising
});

在广播之前,您可能想检查您的设备是否支持作为信标进行传输
。您可以使用
checkTransmissionSupported() 方法来完成。

BeaconStatus transmissionSupportStatus = await beaconBroadcast.checkTransmissionSupported();
switch (transmissionSupportStatus) {
  case BeaconStatus.SUPPORTED:
    // You're good to go, you can advertise as a beacon
    break;
  case BeaconStatus.NOT_SUPPORTED_MIN_SDK:
    // Your Android system version is too low (min. is 21)
    break;
  case BeaconStatus.NOT_SUPPORTED_BLE:
    // Your device doesn't support BLE
    break;
  case BeaconStatus.NOT_SUPPORTED_CANNOT_GET_ADVERTISER:
    // Either your chipset or driver is incompatible
    break;
}

如果您想停止广播,只需调用 stop()

beaconBroadcast.stop();

示例

简单的用法示例可以在 示例文件夹 中找到。

更改信标布局

默认情况下,信标布局根据制造商设置
(请参阅 信标制造商 部分)。您可以更改
布局以模仿传输为不同类型的信标。

注意: 对于 iOS,布局设置为 iBeacon,无法更改。

广播为 AltBeacon

beaconBroadcast
    .setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
    .setMajorId(1)
    .setMinorId(100)
    .start();

广播为 iBeacon

beaconBroadcast
    .setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
    .setMajorId(1)
    .setMinorId(100)
    .setLayout('m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24')
    .setManufacturerId(0x004c)
    .start();

添加额外数据

如果您的信标布局设置正确,则允许您传输
一些额外数据。根据布局,通常最多为 2 字节。

对于 AltBeacon,它是 1 字节的附加数据(来源)。
对于 iBeacon (iOS),没有选项可以发送额外数据,因为 iBeacon 布局
不支持。

使用 AltBeacon 布局添加额外数据

beaconBroadcast
    .setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
    .setMajorId(1)
    .setMinorId(100)
    .setExtraData([123])
    .start();

信标制造商

Android

Android 信标将作为 RadiusNetwork 制造的 AltBeacon 进行广播。
您可以使用 setLayout()setManufacturerId() 方法来更改它。

iOS

对于 iOS,信标将作为 Apple 的 iBeacon 进行广播,无法更改。

在后台传输

Android

由于 Android 8 中引入的后台执行限制
,后台的信标传输受到限制。根据
AltBeacon 文档
,大约为 10 分钟,之后传输将停止。
插件的当前版本不支持前台服务来超出此
限制。

iOS

对于 iOS,应用程序在后台不工作。根据
CoreLocation
文档

重要提示

,在将应用程序广播为信标后,您的应用程序必须继续运行
在前台以广播所需的蓝牙信号。如果用户退出
应用程序,系统将停止通过蓝牙将设备广播为外围设备。此外,从 iOS 13 开始,需要隐私使用描述才能使用蓝牙。否则,应用程序将出现运行时崩溃。
为了解决这个问题,请将以下行添加到您的 Info.plist 中

<key>NSBluetoothAlwaysUsageDescription</key>
<string>(Reason bluetooth is used)</string>

对于早于 iOS 13 的部署目标,请将这些附加行添加到您的 Info.plist 中

<key>NSBluetoothPeripheralUsageDescription</key>
<string>(Reason bluetooth is used)</string>

关于

此插件使用 Android Beacon Library
用于 Android 和 CoreLocation
用于 iOS。

待办事项

还有一些事情需要实现

  • [X] 添加选项以编程方式检查 Android 设备支持
  • [X] 添加选项以设置 Android 实现的布局和制造商
  • [ ] 处理在传输前打开 BLE
  • [ ] 添加前台服务以超出 Android 8+ 的后台限制

GitHub

https://github.com/pszklarska/beacon_broadcast