繁体   English   中英

Swift 3 CoreBluetooth后台数据接收

[英]Swift 3 CoreBluetooth Background data receive

我试图从Arduino接收一些数据,当我按下按钮时,该数据正在发射一些数据。

现在,我注意到一段时间后没有收到它。 我尚未杀死该应用程序。 怎么会? 我已经加了

<key>UIBackgroundModes</key>
<array>
    <string>bluetooth-central</string>
    <string>bluetooth-peripheral</string>
    <string>external-accessory</string>
</array>

我的设备已配对。

编辑:

我正在尝试做与Tile App相同的操作,在那儿真的很好用。

编辑2:

我这样实例化我的经理:

centralManager = CBCentralManager(delegate:self, queue:nil)

您需要通过传递option参数您的还原密钥标识符来初始化CBCentralManager。

let central = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey: "yourkey"])

“您的密钥”可以是您想要的任何内容,这对您很有用,因为您可以了解您的应用已被唤醒以处理BLE消息。 如果当新的BLE消息导致应用程序被系统杀死时,它将在您的应用程序委托didFinish中复活,则启动此密钥将在options参数中传递。

为了使其正常工作,您必须实现委托方法

optional public func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any])

如果应用程序被系统杀死(或被崩溃..而不是用户撞死),则会调用此方法,以通知您发生了新的BLE事件。 在will restore state dict中,您将拥有还原BLE会话所需的所有信息。

在这里,您将找到所有有关在后台使用BLE的Apple建议。

请记住,如果用户执行任何自愿导致连接断开的操作(例如,应用被杀死,禁用了蓝牙),与外围设备的连接将始终被切断。 如果发生崩溃,iOS将继续唤醒/恢复您的应用程序,该应用程序在后台运行,然后被系统杀死。

导致应用程序唤醒的事件是来自注册的通知特征的通知,新的外围设备发现,特征的读取。 (基本上是CoreBluetooth委托的任何回调)

请记住,在后台进行扫描操作有局限性。

从苹果之前链接的文档中:

尽管您可以在后台运行应用程序时执行许多与蓝牙相关的任务,但请记住,在后台运行时扫描外围设备的操作与在前台运行时不同。 特别是当您的应用在后台扫描设备时:

  • 将忽略CBCentralManagerScanOptionAllowDuplicatesKey扫描选项键,并将广告外围设备的多个发现合并为一个发现事件。
  • 如果所有正在扫描外围设备的应用程序都在后台运行,则中央设备扫描广告包的时间间隔会增加。 结果,发现广告外围设备可能需要更长的时间。

快乐的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM