Ios Swift 3核心蓝牙背景数据接收

Ios Swift 3核心蓝牙背景数据接收,ios,swift,bluetooth,Ios,Swift,Bluetooth,我试图从Arduino接收一些数据,当我按下按钮时,它会发出一些数据 现在我注意到,过了一段时间后,它不会收到。我没有杀了那只狗 应用程序还没有。怎么会?我已经补充了 <key>UIBackgroundModes</key> <array> <string>bluetooth-central</string> <string>bluetooth-peripheral</string> &l

我试图从Arduino接收一些数据,当我按下按钮时,它会发出一些数据

现在我注意到,过了一段时间后,它不会收到。我没有杀了那只狗 应用程序还没有。怎么会?我已经补充了

<key>UIBackgroundModes</key>
<array>
    <string>bluetooth-central</string>
    <string>bluetooth-peripheral</string>
    <string>external-accessory</string>
</array>
ui背景模式
,它在那里工作得很好

编辑2:

我将我的经理实例化如下:


centralManager=CBCentralManager(委托:self,队列:nil)

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

let central = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey: "yourkey"])
其中“你的钥匙”可以是你想要的任何东西,只要你明白你的应用程序被唤醒来处理一条不可编辑的消息,这对你很有用。如果当一条新的BLE消息将导致应用程序在应用程序中重新启动时,应用程序被系统终止,则完成启动后,此键将在选项参数中传递

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

optional public func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any])
如果应用程序被系统(或崩溃)杀死(顺便说一句,不是被用户杀死),将调用此函数,以通知您发生了新的BLE事件。在will restore状态下,您将拥有恢复BLE会话所需的所有信息

你们会在后台找到所有苹果推荐的BLE

请记住,如果用户执行任何自动导致连接关闭的操作,例如应用程序被终止、Blueetooth被禁用,则与外围设备的连接将始终被切断。如果应用程序崩溃,iOS将继续唤醒/恢复你的应用程序,应用程序在后台,然后被系统杀死

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

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

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

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

  • CBCentralManager可选低重复扫描选项键为 被忽略,并且一个广告外围设备的多个发现 合并为单个发现事件
  • 如果所有正在扫描的应用程序 对于位于后台的外围设备,为 中央设备扫描广告包的数量增加。因此, 发现广告外设可能需要更长的时间

愉快的编码。

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

let central = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey: "yourkey"])
其中“你的钥匙”可以是你想要的任何东西,只要你明白你的应用程序被唤醒来处理一条不可编辑的消息,这对你很有用。如果当一条新的BLE消息将导致应用程序在应用程序中重新启动时,应用程序被系统终止,则完成启动后,此键将在选项参数中传递

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

optional public func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any])
如果应用程序被系统(或崩溃)杀死(顺便说一句,不是被用户杀死),将调用此函数,以通知您发生了新的BLE事件。在will restore状态下,您将拥有恢复BLE会话所需的所有信息

你们会在后台找到所有苹果推荐的BLE

请记住,如果用户执行任何自动导致连接关闭的操作,例如应用程序被终止、Blueetooth被禁用,则与外围设备的连接将始终被切断。如果应用程序崩溃,iOS将继续唤醒/恢复你的应用程序,应用程序在后台,然后被系统杀死

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

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

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

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

  • CBCentralManager可选低重复扫描选项键为 被忽略,并且一个广告外围设备的多个发现 合并为单个发现事件
  • 如果所有正在扫描的应用程序 对于位于后台的外围设备,为 中央设备扫描广告包的数量增加。因此, 发现广告外设可能需要更长的时间

快乐编码。

我想确认你的应用程序是否在后台?第二,如果是这样的话,如果应用程序在前台,你能正常接收数据吗?是的,所以通常如果按下Arduino上的按钮,我会调大音量并播放声音。这是正确的。当我的应用程序在后台时,它也会工作一段时间,但在某个特定时刻它只是死机。这是因为你的应用程序已经用完了后台执行时间,并移动到挂起状态。不确定是否有,但请看一下此文档:@Abdul91我正在查看此部分:
应用程序必须提供一个界面,允许用户启动和停止蓝牙事件的传递。然后,该界面应根据需要打开或关闭会话。
。这是否意味着我必须有一个开关,上面写着:“当应用程序在后台时允许声音”或类似的东西