首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3 CoreBluetooth背景数据接收

Swift 3 CoreBluetooth背景数据接收
EN

Stack Overflow用户
提问于 2017-07-06 08:41:19
回答 1查看 1.1K关注 0票数 1

我正在尝试从Arduino那里接收一些数据,当我按下按钮时,Arduino会发出一些数据。

现在我注意到过一段时间它就不会收到了。我还没有杀死这个应用程序。怎么会这样?我已经加了

代码语言:javascript
复制
<key>UIBackgroundModes</key>
<array>
    <string>bluetooth-central</string>
    <string>bluetooth-peripheral</string>
    <string>external-accessory</string>
</array>

我的设备都是成对的。

编辑:

我试着做和瓷砖应用程序一样的工作,它在那里工作得很好。

编辑2:

我像这样实例化我的经理:

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

EN

回答 1

Stack Overflow用户

发布于 2017-07-07 09:52:05

您需要通过传入恢复密钥标识符的选项参数来初始化CBCentralManager。

代码语言:javascript
复制
let central = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey: "yourkey"])

在哪里“你的钥匙”可以是任何你想要的,这是有用的,你只要明白,你的应用程序被唤醒,以处理BLE消息。如果应用程序被系统杀死,当一个新的BLE消息将导致它在应用程序委托中复活时,启动此键的didFinish将在options参数中传递。

要使它正常工作,您必须实现委托方法

代码语言:javascript
复制
optional public func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any])

这将在应用程序被系统(或崩溃)杀死时调用。顺便说一句,不是由用户)为了通知你一个新的BLE事件发生了。在will还原状态dict中,您将获得恢复BLE会话所需的所有信息。

这里你会发现苹果的所有建议与BLE合作的背景。

请记住,如果用户执行任何主动导致连接中断的操作,则与您的外围设备的连接将始终被切断,例如应用程序被杀死、蓝牙功能被禁用。iOS将继续唤醒/复活您的应用程序,以防崩溃,应用程序在后台,然后被系统杀死。

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

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

来自苹果之前的文件链接:

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

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

编码愉快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44943855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档