beacon_broadcast

Creator: coderz1093

Last updated:

Add to Cart

Description:

beacon broadcast

Beacon Broadcast plugin for Flutter #

A Flutter plugin for turning your device into a beacon.
Usage #
To use this plugin, add beacon_broadcast as a dependency in your pubspec.yaml
file and import:
import 'package:beacon_broadcast/beacon_broadcast.dart';
copied to clipboard
Now you can create BeaconBroadcast object and start using it:
Important note: For Android app, user needs to turn on Bluetooth on the
device first.
BeaconBroadcast beaconBroadcast = BeaconBroadcast();
copied to clipboard
In the simplest case, to start advertising just set your UUID, major and minor
id and call start():
beaconBroadcast
.setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
.setMajorId(1)
.setMinorId(100)
.start();
copied to clipboard
You can also customize your beacon before starting:
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();
copied to clipboard
You can check what's current state of your beacon:
bool isAdvertising = await beaconBroadcast.isAdvertising()
copied to clipboard
You can also listen for changes in beacon advertising state:
beaconBroadcast.getAdvertisingStateChange().listen((isAdvertising) {
// Now you know if beacon is advertising
});
copied to clipboard
Before advertising, you may want to check if your device supports transmitting
as a beacon. You may do it using
checkTransmissionSupported() method.
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;
}
copied to clipboard
If you want to stop advertising, just call stop():
beaconBroadcast.stop();
copied to clipboard
Examples #
Simple usage example can be found in the example folder.
Changing beacon layouts
By default beacons layout is set according to the manufacturer
(see section Beacon manufacturers). You can change
that layout to imitate transmitting as a different kind of beacon.
Note: For iOS layout is set to iBeacon and can't be changed.
To broadcast as AltBeacon:
beaconBroadcast
.setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
.setMajorId(1)
.setMinorId(100)
.start();
copied to clipboard
To broadcast as 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();
copied to clipboard
Adding extra data
If you have your beacon layout set accordingly, you're allowed to transmit
some extra data. Depending on the layout it's usually up to 2 bytes.
For AltBeacon it's 1 byte of additional data (source).
For iBeacon (iOS) there's no option to send extra data, as the iBeacon layout
doesn't support it.
To add extra data using AltBeacon layout:
beaconBroadcast
.setUUID('39ED98FF-2900-441A-802F-9C398FC199D2')
.setMajorId(1)
.setMinorId(100)
.setExtraData([123])
.start();
copied to clipboard
Beacon manufacturers #
Android
Android beacon will advertise as the AltBeacon manufactured by RadiusNetwork.
You can change it with setLayout() and setManufacturerId() methods.
iOS
For iOS, beacon will advertise as an iBeacon (by Apple), it can't be changed.
Transmitting in the background #
Android
Due to background execution limits introduced in Android 8
beacons transmission in the background is limited. Based on the
AltBeacon documentation
it's around 10 minutes, after that time transmission will stop.
Current version of plugin doesn't support Foreground Services to exceed this
limitation.
iOS
For iOS, application doesn't work in the background. According to the
CoreLocation
documentation:

Important
After advertising your app as a beacon, your app must continue running in the
foreground to broadcast the needed Bluetooth signals. If the user quits the
app, the system stops advertising the device as a peripheral over Bluetooth.In addition, since iOS 13, a privacy usage description is required to use Bluetooth. Otherwise, the app will experience a runtime crash.
To remedy this, add the following lines to your Info.plist

<key>NSBluetoothAlwaysUsageDescription</key>
<string>(Reason bluetooth is used)</string>
copied to clipboard
For deployment targets earlier than iOS 13, add these additional lines to your Info.plist
<key>NSBluetoothPeripheralUsageDescription</key>
<string>(Reason bluetooth is used)</string>
copied to clipboard
About #
This plugin uses Android Beacon Library
for Android and CoreLocation
for iOS.
Todo #
There are still few things left to implement:

✅ Adding option for checking for Android device support programmatically
✅ Adding option to set layout and manufacturer for Android implementation
❌ Handle turning on BLE before transmitting
❌ Add Foreground Service to exceed background limitations on Android 8+

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.