BLE iOS Nativescript:广播数据失败
Posted
技术标签:
【中文标题】BLE iOS Nativescript:广播数据失败【英文标题】:BLE iOS Nativescript: Failure to broadcast data 【发布时间】:2016-11-07 17:10:10 【问题描述】:我目前正在尝试通过扩展 Git code 在 nativescript 中实现 BLE 广告+扫描,并为此添加广播功能。在 android 中我已经成功构建了一个广告,我可以在 ios 和 Android 下扫描和解析它。
但是,我的 iOS 尝试目前未能将实际数据放入服务中:如果不包含任何特征,我会收到一个错误*,这显然会转换为无效值,因此,虽然有广播,但它不会包括服务。按照我找到的教程*(将其代码转换为 javascript 样式后),我应该在 CBMutableService 上使用 setCharacteristics
。但是,添加特征会导致警告setCharacteristics
不是可用函数。
var kServiceUUID = NSString.stringWithString("2EACE71A-1F75-426E-833F-E77CB58F7201")
var kCharacteristicUUID = NSString.stringWithString("D40670C5-4ECC-4776-8661-B8A11C2833B3");
var serviceUUID = [CBUUID.UUIDWithString(kServiceUUID)];
var characteristicUUID = [CBUUID.UUIDWithString(kCharacteristicUUID)];
var message = arg.message || "No message configured.";
var service = CBMutableService.alloc().initWithTypePrimary(serviceUUID, true);
var service = CBMutableService.alloc().initWithTypePrimary(serviceUUID, true);
var characteristic = CBMutableCharacteristic.alloc().initWithTypePropertiesValuePermissions(characteristicUUID, CBCharacteristicPropertyRead | CBCharacteristicPropertyNotify, "test", CBAttributePermissionsReadable);
service.setCharacteristics([characteristic]);
Bluetooth._state.periManager.addService(service);
var dict = NSDictionary.alloc().initWithObjectsForKeys(["test2"],[kServiceUUID]);
Bluetooth._state.periManager.startAdvertising(dict);
我现在会得到
"CONSOLE LOG file:///app/main-view-model.js:199:32: TypeError: service.setCharacteristics is not a function. (In 'service.setCharacteristics([characteristic])', 'service .setCharacteristics' 未定义)"
作为错误。但是,不添加特征会给我
CBMutableService: 0x17ef4bd0 Primary = YES, UUID = 2EACE71A-1F75-426E-833F-E77CB58F7201, Included Services = (null), Characteristics = (null)
作为服务,但扫描结果中没有服务。
*我在 iOS 下编程,目前使用的是 Windows,因为我只能在工作时登录 iOS。因此,我目前没有可用的链接。
【问题讨论】:
更新:我发现我可以直接使用 service.characteristics = <...> 来设置特征。我确实必须调整特性以不使用 UUID 数组而是使用 UUID 本身。仍然没有成功广播,可能是因为我没有在其中输入值,但特性本身已正确添加到服务中。 【参考方案1】:特征字段可以直接访问,但是特征本身需要是正确的,只有一个serviceUUID:
service.characteristics = [characteristic];
代码的更新版本(仍然不完整):
var kServiceUUID = NSString.stringWithString("2EACE71A-1F75-426E-833F-E77CB58F7201");
var kCharacteristicUUID = NSString.stringWithString("D40670C5-4ECC-4776-8661-B8A11C2833B3");
var serviceUUID = CBUUID.UUIDWithString(kServiceUUID);
var characteristicUUID = CBUUID.UUIDWithString(kCharacteristicUUID);
var service = CBMutableService.alloc().initWithTypePrimary(serviceUUID, true);
var characteristic = CBMutableCharacteristic.alloc().initWithTypePropertiesValuePermissions(characteristicUUID, CBCharacteristicPropertyRead | CBCharacteristicPropertyNotify, null, CBAttributePermissionsReadable);
service.characteristics = [characteristic];
这段代码仍然不完整,因为特征还没有值,但服务本身不会抱怨特征。
【讨论】:
以上是关于BLE iOS Nativescript:广播数据失败的主要内容,如果未能解决你的问题,请参考以下文章
android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
iOS 中的 iBeacons - 没有来自实际 BLE 设备的回调,但是当另一个 iOS 设备用作广播器时会调用 didRangeBeacons