我正在尝试从Arduino那里接收一些数据,当我按下按钮时,Arduino会发出一些数据。
现在我注意到过一段时间它就不会收到了。我还没有杀死这个应用程序。怎么会这样?我已经加了
<key>UIBackgroundModes</key>
<array>
<string>bluetooth-central</string>
<string>bluetooth-peripheral</string>
<string>external-accessory</string>
</array>我的设备都是成对的。
编辑:
我试着做和瓷砖应用程序一样的工作,它在那里工作得很好。
编辑2:
我像这样实例化我的经理:
centralManager = CBCentralManager(delegate:self, queue:nil)
发布于 2017-07-07 09:52:05
您需要通过传入恢复密钥标识符的选项参数来初始化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还原状态dict中,您将获得恢复BLE会话所需的所有信息。
这里你会发现苹果的所有建议与BLE合作的背景。
请记住,如果用户执行任何主动导致连接中断的操作,则与您的外围设备的连接将始终被切断,例如应用程序被杀死、蓝牙功能被禁用。iOS将继续唤醒/复活您的应用程序,以防崩溃,应用程序在后台,然后被系统杀死。
导致应用程序被唤醒的事件是来自注册通知特征的通知、新的外围设备发现、读取特性的通知。(基本上所有CoreBluetooth委托的回调)
请记住,扫描操作在后台有其局限性。
来自苹果之前的文件链接:
虽然您可以在后台执行许多与蓝牙相关的任务,但请记住,当应用程序处于后台时,扫描外围设备的操作方式与应用程序处于前台时的操作不同。特别是,当您的应用程序在后台扫描设备时:
编码愉快。
https://stackoverflow.com/questions/44943855
复制相似问题