【问题标题】:Backgrounded CBPeripheral doesn't stay readable后台 CBPeripheral 无法保持可读性
【发布时间】:2020-05-17 14:25:01
【问题描述】:

我有一个应用程序可以广播带有少量文本的CBPeripheral。 我使用bluetooth-peripheral后台模式让它在后台播放。

当我从另一台设备扫描时,它在前台工作正常。我检测外围设备、连接、发现服务,然后从服务中读取数据。

然而,在后台,有些事情不太对劲。我用我的服务扫描外围设备,它发现它很好。我连接也很好。然后我 discoverServices 使用我的服务,这在调用 didDiscoverServices 回调时也很顺利。然而在这个回调中,外设没有没有服务! peripheral.services 为空。 如果没有这项服务,它就不会走到这一步,那又是什么呢? 这个回调中的error也是nil

在 iOS 12 上广播 CBPeripheral 时一切正常

编辑 ----- 说得太早了,现在我的 iOS 12 设备似乎已经开始出现同样的症状。片刻之后,CBPeripheral 不起作用。

【问题讨论】:

    标签: ios bluetooth-lowenergy core-bluetooth cbperipheral ios-bluetooth


    【解决方案1】:

    通过在CBPeripheralManager 上调用startAdvertising 时添加CBAdvertisementDataLocalNameKey 键解决了该问题。如果您希望 CBPeripheral 在后台继续广播,似乎需要此密钥。 Apple 文档没有提到这一点。

    【讨论】:

    • 你好@Darren,对我来说这个完全相同的问题仍然存在,尽管提供了用于初始化外围广告服务的 CBAdvertisementDataLocalNameKey 代码:// create our characteristics let characteristic = CBMutableCharacteristic.init(type: CBUUID(string: "12484b62-8da6-40b7-a54a-94ddf8f957a4"), properties: CBCharacteristicProperties.read, value: "dummy data to broadcast".data(using: String.Encoding.utf8), permissions: CBAttributePermissions.readable)
    • 能否请您与我联系,或回复我的上述评论。尽管使用了 CBAdvertisementDataLocalNameKey,但发现没有按预期工作,我得到了和你一样的错误
    • 我的问题已通过将CBAdvertisementDataLocalNameKey 添加到CBPeripheralManager 来解决。我建议你开始一个新问题。
    • 感谢您的回复。你的代码现在还能用吗?即你能从后台的外围设备中发现一个服务,连接到它,并读取它的特性吗?我将开始一个新的讨论并链接这个问题,但如果你仍然对该主题感兴趣,请通过我的电子邮件与我联系。..
    • 是的,我的代码现在可以正常工作了。我可以让 iPhone 待机数天,但仍然可以在后台应用中发现并连接外围设备。
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多