这个话题说明了一切,真的.现有的文档表明,针对运行在iOS设备上的CoreBluetooth框架编写的应用程序可以将"bluetooth central"添加到其后台权限列表中,从而在不活动时处理某种类型的bluetooth事件,但哪exact个事件可以和不可以交付?

例如:

  1. 我可以与已经建立配对的设备进行通信吗?
  2. 我是否可以定期发出查找请求,以查找超出范围/我以前从未见过的设备?(例如,如果我想在遇到新的有趣设备时发送通知)
  3. 如果设备超出了范围,然后又回来了怎么办?我将在没有用户干预的情况下断开连接和连接事件,还是需要将我放在前台并让用户显式请求重新连接?

推荐答案

似乎没有人知道,所以我买了一个iOS开发者账户,并做了一些实验.这是我的发现:

在前台运行时,可以使用CBCentralManager::scanForPeripheralsWithServices.启动扫描您可以对广告特定服务的设备进行restricted次扫描,也可以对unrestricted次(该调用的参数为零)进行扫描.它也可以是allowdisallow duplicates;在前一种情况下,每当iPhone收到广告数据包时,您都会得到一个didDiscoverPeriphery回调;在后一种情况下,每个设备只会得到一个回调.

当您进入后台时,规则显示如下:

  • 如果您运行的是unrestricted扫描,它将被自动取消.您不会得到任何didDiscover回调.
  • 如果您的扫描值为restricted(即您指定了一个或多个要查找的服务UUID),则您的扫描将继续运行,但allow duplicates flag will be ignored.这意味着您现在将只获得new个设备的didDiscoverPeriphery回调.如果在前台看到了所有设备,您将不会收到任何回调.
  • 启动和停止扫描does not重置哪些设备被认为是新设备.如果存在一个设备,您将只收到一个回调,即使在多次扫描中也是如此,除非.
  • 如果您对某个设备执行connect次,然后是disconnect次,然后是scan again次,则将再次枚举该设备(即,您将再获得一次对didDiscoverPeriphery的调用).我猜iOS认为这是对这款设备"表现出了兴趣".

我不知道try 连接到不可连接的设备(例如,BLE广告商,就像那些实现邻近配置文件的设备)是否足够好,因为我的示例设备是可连接的.然而,至少对于可连接的设备而言,该扫描/连接/断开/扫描过程足以轮询设备在后台的存在.

以上结果是使用运行iOS 5.0.1的iPhone 4S收集的

Ios相关问答推荐

在相机动作之前快速防止场景视点重置

带有故事板的Xcode 15 UIKit视图可以与#Preview宏一起使用吗?

仅更改 AttributedString 的字符串(例如 UIButton 配置 attributeTitle)

ITMS-90432:将应用上传到应用store 时出现问题

工具栏底部 iOS 16 - SwiftUI

.onChange(of: ) 一次用于多个 @State 属性?

Flutter 错误:CocoaPods not installed or not in valid state.

如何使用情节提要重新排列 UITabBarController 项目?

iOS 8 - 使用自定义演示关闭视图控制器后屏幕空白

UIButton在iOS7中没有显示突出显示

Swift 错误:在其自己的初始值中使用的变量

iOS swift从另一个数组中删除一个数组的元素

如何在 Xcode 4 中切换 .h 和 .m

在 Swift 中上传带参数的图像

在 iOS 7 上更改标签栏色调 colored颜色

iOS 应用程序中的手动语言 Select (iPhone 和 iPad)

cocoapods中~>的用法是什么

如果已安装,则重定向到应用程序,否则重定向到 App Store

swift 语言中的 null / nil

iOS7 UITextView contentsize.height 替代