- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在我的一个应用程序中启用了 CoreBluetooth。有一个中央 iOS 设备,以及最多 2 个可以连接到中央的外围 iOS 设备。
我通过使用中央订阅的外围设备上的一个特性实现了上游通信,我通过使用中央存储和写入的外围设备上的另一个特性实现了下游通信使用 writeValue:forCharacteristic:type :
这些在外设中是这样设置的:
upstream = [[CBMutableCharacteristic alloc] initWithType:pipeUUID properties:CBCharacteristicPropertyNotify value:nil permissions:0];
downstream = [[CBMutableCharacteristic alloc] initWithType:downstreamUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteable];
向下游发送数据时,通常如下所示:
NSData* data = [[NSString stringWithFormat:@"%d,%d", AppStateID, SomeValue] dataUsingEncoding:NSUTF8StringEncoding];
[_peripheral1 writeValue:data forCharacteristic:_peripheral1Downstream type:CBCharacteristicWriteWithResponse];
这个实现确实有效,而且效果很好,但我注意到有时会出现一些问题。
当我通过上游特性从外围设备向中央设备发送数据时,中央设备几乎立即接收到数据,通常是在同一帧上。但是,当我通过下游特征从中央向外围设备发送数据时,外围设备可能需要 0.5 秒到 5 秒才能接收数据。
这不是什么大问题,但如果用户沟通的时间不那么长,肯定会更好。
如果它是相关的,我会注意到我确实从写请求中得到了一个重复出现的错误,即使它们确实成功了。
Write error: Error Domain=CBATTErrorDomain Code=241 "Unknown ATT error." UserInfo={NSLocalizedDescription=Unknown ATT error.}
最佳答案
您的实现看起来不错,但在外设端代码中,您需要成功响应写请求,否则中央将超时并在 5 秒左右后给出错误 - 您在上面得到的那个。该值仍会在 Peripheral 上更新,但中央无法知道,除非您像 (Swift) 那样回应:
self.peripheralManager.respondToRequest(request, withResult: CBATTError.Success)
关于ios - 为什么 CBCharacteristics 接收写入值比更新值花费的时间更长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299794/
我在我的一个应用程序中启用了 CoreBluetooth。有一个中央 iOS 设备,以及最多 2 个可以连接到中央的外围 iOS 设备。 我通过使用中央订阅的外围设备上的一个特性实现了上游通信,我通过
我目前正在开发扫描我公司信标的 BLE 应用程序,我需要更新 CBCharacteristic 的值。 我在写入函数后没有收到任何错误,但更改并未反射(reflect)在 BLE 设备上。 我已经扫描
我有可以与 BLE 设备配合使用的应用程序。我有特征值,但无法将其转换为字符串。例如, value = 如何转换成字符串? 最佳答案 let dd = getCharacteristic.value
首要任务:运行 OSX 10.10.4、iOS 4、Xcode 6.3.2、iPhone 6、Swift 短篇小说:我这里有一个特定的蓝牙 LE 设备,当特性值发生变化时,我想从中接收通知,例如通过用
在最新的 Apple 文档中,CBCharacteristic 的 UUID 属性有一条线穿过它,并且表示它仅在 5.0 到 7.1 中可用。但是,您通常希望看到的“已弃用”一词却不见踪影。 更重要的
我正在尝试使用 CoreBluetooth 写入特定的已知特征。我觉得这应该是可能的,因为我使用了 Texas Instruments BLE 实用程序,您可以在连接的外围设备上选择“写入值”操作,只
在 CoreBluetooth 应用程序中,我想从通知切换到指示,以便我可以确保另一端收到数据。 在Apple的示例代码中BTLE Central Peripheral Transfer ,我尝试用
我有一个已成功连接的 BLE 设备。在这种情况下,每当我向 BLE 设备发送字符串“GET DATA”时,设备都会通过向我发送特定响应来响应。我正在使用 didDiscoverCharacterist
我正在使用 CoreBluetooth 框架制作一个应用程序,我最近将它移植到 swift 2.0。在我的代码中,我有一个全局变量,它是一个 CBCharacteristic,在 swift 1.2
如何比较这个? uuid 和字符串不能比较 func charValues() { let charValue = String(data: getCharacteristic.valu
大家好,我正在尝试让这个蓝牙 LE 设备连接到应用程序并获取值。我正在使用 Core Bluetooth,它应该可以获取值。我让它工作,但突然间它在更新时停止通知值。 func peripheral(
我正在我的应用程序中开发 BLE 功能。我在我的项目中添加了CoreBluetooth框架。 我已经添加了, import CoreBluetooth 在 swift 文件的起始位置。 现在,当我尝试
我创建了一个充当 CBPeripheral 的应用程序。我试图在连接的 Central 上显示服务和特征的名称,但我无法找到执行此操作的方法。我已经阅读了 CBCharacteristic 的类引用,
我无法将类型为 NSData 的 CBCharacteristic 的值属性转换为 NSString。我尝试了通常的 initWithData:encoding: NSString 方法,如下所示。但
我想从蓝牙模块读取数据。有一个特征有4个值,存储在8个字节/4个字中。 这是存储在 characteristic.value 中的数据: 0x01 0x01 0x00 0x01 0x04 0x05 0
当我当时加载任何方法时,它会向我显示此警告,因为我正在使用从方法中检索的特性 var cbChar : CBCharacteristic func bleManagerPeripheral(_ p
我是一名优秀的程序员,十分优秀!