All Projects → pszklarska → Beacon_broadcast

pszklarska / Beacon_broadcast

Licence: mit
A Flutter plugin for turning your device into a beacon.

Programming Languages

dart
5743 projects

Projects that are alternatives of or similar to Beacon broadcast

BLE-Beacon-Tracking-System
Indoor Beacon Tracking System based on BLE
Stars: ✭ 18 (-72.73%)
Mutual labels:  beacon
Aggressorscripts
Aggressor scripts for use with Cobalt Strike 3.0+
Stars: ✭ 501 (+659.09%)
Mutual labels:  beacon
Catchme
CatchME - WiFi Fun Box "Having Fun with ESP8266"
Stars: ✭ 28 (-57.58%)
Mutual labels:  beacon
marvelmind-indoor-gps-tutorial
A tutorial for setting up and interfacing with Marvelmind Indoor 'GPS' ultrasonic beacons!
Stars: ✭ 31 (-53.03%)
Mutual labels:  beacon
Geacon
Practice Go programming and implement CobaltStrike's Beacon in Go
Stars: ✭ 460 (+596.97%)
Mutual labels:  beacon
Android Sdk
Beaconstac ADVANCED SDK for Android devices
Stars: ✭ 18 (-72.73%)
Mutual labels:  beacon
specification
GA4GH Beacon specification.
Stars: ✭ 31 (-53.03%)
Mutual labels:  beacon
Monitor
Distributed advertisement-based BTLE presence detection reported via mqtt
Stars: ✭ 1,092 (+1554.55%)
Mutual labels:  beacon
React Native Beacons Manager
React-Native library for detecting beacons (iOS and Android)
Stars: ✭ 467 (+607.58%)
Mutual labels:  beacon
React Native Ibeacons
React Native library for detecting beacons (iOS and Android)
Stars: ✭ 9 (-86.36%)
Mutual labels:  beacon
Ble Indoor Positioning
Multilateration using bluetooth beacons
Stars: ✭ 274 (+315.15%)
Mutual labels:  beacon
React Native Ibeacon
📡 iBeacon support for React Native
Stars: ✭ 359 (+443.94%)
Mutual labels:  beacon
Ping Blocker
Stop sites from tracking the links you visit through hyperlink auditing
Stars: ✭ 23 (-65.15%)
Mutual labels:  beacon
CobaltStrike Script Wechat Push
CobatStrike-Script, Beacon上线,微信实时推送!
Stars: ✭ 41 (-37.88%)
Mutual labels:  beacon
Reactnativebeaconexample
React-Native Beacon example (medium article related)
Stars: ✭ 42 (-36.36%)
Mutual labels:  beacon
react-native-ibeacon-simulator
Simulate device act as an iBeacon, or transmit as an iBeacon signal from your phone
Stars: ✭ 48 (-27.27%)
Mutual labels:  beacon
Awesome Cobaltstrike Defence
Defences against Cobalt Strike
Stars: ✭ 507 (+668.18%)
Mutual labels:  beacon
Indoorgps
Position Calculating with Trilateration via Bluetooth Beacons(Estimote)
Stars: ✭ 59 (-10.61%)
Mutual labels:  beacon
Luch
Small and easy to use Android library for BLE beacon monitoring
Stars: ✭ 55 (-16.67%)
Mutual labels:  beacon
Wi Pwn
ESP8266 Deauther ​with a material design WebUI 📶
Stars: ✭ 839 (+1171.21%)
Mutual labels:  beacon

Beacon Broadcast plugin for Flutter

Awesome Flutter Pub

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';

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();

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();

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();

You can check what's current state of your beacon:

bool isAdvertising = await beaconBroadcast.isAdvertising()

You can also listen for changes in beacon advertising state:

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

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;
}

If you want to stop advertising, just call stop():

beaconBroadcast.stop();

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();

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();

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();

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>

For deployment targets earlier than iOS 13, add these additional lines to your Info.plist

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

About

This plugin uses Android Beacon Library for Android and CoreLocation for iOS.

Todo

There are still few things left to implement:

  • [X] Adding option for checking for Android device support programmatically
  • [X] 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+
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].