我正在开发在后台模式下读取特定特征的应用程序。通过在plist中选择"Uses Bluetooth LE Accessories"
作为背景模式,可以在后台实现这一点。如果我们阅读已知服务的特定特征,是否有机会在后台拒绝该应用程序?阅读特征应该连续发生。如果我们setNotify to "True"
将在后台运行。如果有人知道,请提供一些有价值的建议/解决方法。预先感谢。
答案 0 :(得分:1)
1)是否可以通过在plist中将背景模式选择为“使用Bluetooth LE配件”来在后台实现此功能。
是的,当您的应用程序处于后台模式时,在功能选项卡中设置“使用Bluetooth LE附件”后台模式,您绝对可以阅读ble特性。
2)如果我们阅读已知服务的特定特征,是否有可能在后台拒绝该应用程序?
如果您的应用需要背景模式并在功能标签中正确声明,则不会拒绝该应用
3)读取特性应连续进行。如果我们将Notify设置为“ True”,则将在后台运行
为了每次在ble外围设备的ble特性更改其值时得到通知,您可以正确地将setNotify设置为true于所需特性。每次特征更改其值时,都会触发peripheral(_:didUpdateStateFor:Error)回调,您可以获取更新后的值。正确设置后台模式,即使您的应用程序在后台并且手机已锁定,也会触发此回调。
答案 1 :(得分:0)
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService,
error: Error?) {
guard let characteristics = service.characteristics else { return }
for characteristic in characteristics {
print(characteristic)
if characteristic.properties.contains(.read) {
print("\(characteristic.uuid): properties contains .read")
peripheral.readValue(for: characteristic)
}
if characteristic.properties.contains(.notify) {
print("\(characteristic.uuid): properties contains .notify")
}
}
}
答案 2 :(得分:0)
func外设(_外设:CBPeripheral,didUpdateValueFor特性:CBCharacteristic, 错误:错误?) {
print("characteristic: ", characteristic)
guard let string = String(bytes: characteristic.value!, encoding: .utf8) else {
return
}
}
答案 3 :(得分:0)