如何使用CoreBluetooth读取背景BLE中的特征

时间:2019-05-02 07:05:29

标签: ios swift bluetooth-lowenergy core-bluetooth

我正在开发在后台模式下读取特定特征的应用程序。通过在plist中选择"Uses Bluetooth LE Accessories"作为背景模式,可以在后台实现这一点。如果我们阅读已知服务的特定特征,是否有机会在后台拒绝该应用程序?阅读特征应该连续发生。如果我们setNotify to "True"将在后台运行。如果有人知道,请提供一些有价值的建议/解决方法。预先感谢。

4 个答案:

答案 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)