[英]Flutter : IOS to IOS Broadcast Beacon not working
我目前正在构建一个应用程序,将我的设备变成 Beacon,同时扫描其他 Beacon。 所以我可以跟踪我接触过的信标。
问题
目前我已经在以下场景中测试了这段代码:
这很奇怪,我需要帮助来解决这个问题,拜托了!
我目前已经实现了 2 个包来实现这个功能:
(1) 广播用
信标广播: https ://pub.dev/packages/beacon_broadcast 版本:0.2.1
(2) 用于扫描其他信标
flutter_blue: https ://pub.dev/packages/flutter_blue 版本:0.6.3+1
这些是我的代码的一些瞥见
(1) 广播用
String UUID = 'DYNAMIC_UUID_FOR_EACH_DEVICE';
static const MAJOR_ID = 1;
static const MINOR_ID = 30;
static const TRANSMISSION_POWER = -59;
static const IDENTIFIER = 'com.example.myDeviceRegion';
static const LAYOUT = 'm:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24';
static const MANUFACTURER_ID = 0x004c;
BeaconBroadcast beaconBroadcast = BeaconBroadcast();
beaconBroadcast
.setUUID(UUID)
.setMajorId(MAJOR_ID)
.setMinorId(MINOR_ID)
.setTransmissionPower(TRANSMISSION_POWER)
.setIdentifier(IDENTIFIER)
.setLayout(LAYOUT)
.setManufacturerId(MANUFACTURER_ID);
.start();
(2) 用于扫描
FlutterBlue flutterBlue = FlutterBlue.instance;
flutterBlue.startScan(timeout: Duration(seconds: 30));
flutterBlue.scanResults.listen((List<ScanResult> results) {
print('scanningListen...');
for (ScanResult result in results) {
result.advertisementData.manufacturerData.forEach((item, hexcodeAsArray) => {
print("calculated UUID String : " + calculateHexFromArray(v));
_addToScanResult(calculateHexFromArray(v));
});
}
}
String calculateHexFromArray(decimalArray) {
String uuid = '';
decimalArray.forEach((i) => {uuid += i.toRadixString(16).padLeft(2, '0')});
String uuid1 = uuid.substring(4, uuid.length - 12);
return uuid1.toUpperCase();
}
不幸的是,您无法在 iOS 上使用 FlutterBlue 检测 iBeacon 数据包。
为什么? FlutterBlue 使用原始蓝牙扫描来检测信标,这意味着在 iOS 上使用原生 CoreBluetooth 扫描 API。 Apple 阻止 CoreBluetooth API 读取任何可解码为 iBeacon 广告的蓝牙广告的原始字节。 虽然这听起来很疯狂,但这很可能是由 Apple 对安全问题的误导所致。 在我的博客文章中阅读更多内容: CoreBluetooth 不会让您看到 iBeacons
解决此问题的两个选项:
切换到使用 AltBeacon 格式。 只需更改LAYOUT = 'm:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25';
和MANUFACTURER_ID = 0x0118;
这会起作用,但缺点是广告只能在前台的 iOS 上检测到。
切换到在 iOS 上使用不同的检测库,该库使用 CoreLocation(唯一允许在 iOS 上检测 iBeacon 的 API)而不是 CoreBluetooth。 这意味着放弃 FlutterBlue 以支持FlutterBeacon或类似的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.