当后台应用程序扫描蓝牙连接的外围设备时

Posted

技术标签:

【中文标题】当后台应用程序扫描蓝牙连接的外围设备时【英文标题】:When app in Background scan Bluetooth connecting peripherals 【发布时间】:2017-10-30 11:10:47 【问题描述】:

ios 11:当 App 在后台 CBCentralManager 委托方法 didDiscoverPeripheral、didConnectPeripheral、didFailToConnectPeripheral、didDisconnectPeripheral 未调用时。

【问题讨论】:

请出示您的代码 myCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)]; - (void)centralManagerDidUpdateState:(CBCentralManager *)central if (central.state == CBCentralManagerStatePoweredOn) NSLog(@"BLE ON"); [myCentralManager scanForPeripheralsWithServices:nil options:@ CBCentralManagerScanOptionAllowDuplicatesKey : @YES ]; 请编辑您的问题以包含您的代码,格式正确。请注意,您不能在后台使用重复项扫描键。 【参考方案1】:

核心蓝牙后台执行模式。

如果您的应用需要在后台运行以执行某些蓝牙相关任务,则必须在其信息属性列表(Info.plist) 文件中声明它支持Core 蓝牙后台执行模式。

当您的应用声明这一点时,系统会将其从挂起状态唤醒,以允许其处理与蓝牙相关的事件。这种支持对于与定期传输数据的低功耗蓝牙设备(例如心率监测器)进行交互的应用非常重要。

应用可以声明两种核心蓝牙后台执行模式——一种用于实现中心角色的应用,另一种用于实现外围角色的应用。如果您的应用程序实现了这两种角色,它可能会声明它支持两种后台执行模式。通过将 UIBackgroundModes 键添加到 Info.plist 文件并将键的值设置为包含以下字符串之一的数组来声明核心蓝牙后台执行模式:

1) bluetooth-central - 该应用使用核心蓝牙框架与蓝牙低功耗外围设备进行通信。

2) bluetooth-peripheral - 应用使用 Core Bluetooth 框架共享数据。

点击苹果开发者文档链接。

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

更新:

蓝牙外设后台执行模式 要在后台执行某些外围角色任务,您必须在应用的 Info.plist 文件中包含 UIBackgroundModes 键和 bluetooth-peripheral 值。当此键值对包含在应用的 Info.plist 文件中时,系统会唤醒您的应用以处理读取、写入和订阅事件。

除了允许您的应用被唤醒以处理来自连接中心的读取、写入和订阅请求之外,Core 蓝牙框架还允许您的应用在后台状态下进行广告。

也就是说,您应该注意,当您的应用处于后台时,广告的运作方式与您的应用处于前台时不同。尤其是当您的应用在后台投放广告时。

可能对你有用!!

【讨论】:

我们已经在 Info.pList 中的背景键上面做了这个,对我没有帮助。 关注此文档:developer.apple.com/library/content/documentation/…

以上是关于当后台应用程序扫描蓝牙连接的外围设备时的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 当应用程序在后台时取消蓝牙连接

当应用程序在后台时扫描外围设备(例如,当屏幕锁定时)

当应用程序在后台时扫描外围设备(例如屏幕锁定时)

我们可以使用蓝牙重新连接断开的外围设备而无需再次扫描 ios

重启蓝牙后重新连接时应用程序未发现服务

蓝牙扫描启动 SwiftUI 后渲染列表