主题已经说明了一切,真的。就其存在而言,文档表明针对 iOS 设备上运行的 CoreBluetooth 框架编写的应用程序可以将“bluetooth-central”添加到其后台权限列表中,从而在不活动时处理某种蓝牙事件,但exact事件是否已交付?
例如:
- 我可以与已建立配对的设备进行通信吗?
- 我可以定期发出发现请求来查找超出范围/我以前从未见过的设备吗? (例如,如果我希望能够在遇到新的有趣设备时发送通知)
- 如果设备超出范围然后又返回怎么办?我是否会在没有用户干预的情况下获得断开连接和连接事件,或者我是否需要置于前台并让用户明确请求重新连接?
似乎没有人知道,所以我购买了一个 iOS 开发者帐户并进行了一些实验。这是我发现的:
在前台运行时,您可以使用 CBCentralManager::scanForPeripheralsWithServices 启动扫描。您的扫描可以是受限制的向特定服务做广告的设备,或无限制的(为该调用的参数传递 nil)。还可以allow or 不允许重复;在前一种情况下,每次 iPhone 收到广告数据包时,您都会收到 didDiscoverPeripheral 回调;在后者中,对于找到的每个设备,您只会收到一个回调。
进入后台后,出现的规则如下:
- 如果您正在运行无限制的扫描,它将被默默取消。您将不会收到任何 didDiscover 回调。
- 如果您的扫描是受限制的(即您指定了一个或多个您正在查找的服务 UUID),您的扫描将继续运行,但允许重复标志将被忽略。这意味着您现在只能获得 didDiscoverPeripheral 回调new设备。如果所有设备都在前台显示,您将不会收到任何回调。
- 开始和停止扫描does not重置哪些设备被视为新设备。如果存在一台设备,即使在多次扫描中,您也只会收到一次回调,除非......
- If you connect到设备,然后断开, then 重新扫描,该设备将被再次枚举(即您将再次调用 didDiscoverPeripheral)。我猜 iOS 认为这是对该设备“表现出兴趣”。
我不知道尝试连接到不可连接的设备(例如 BLE 广告商,如那些实现邻近配置文件的设备)是否足够好,因为我的示例设备是可连接的。然而,至少对于可连接设备,此扫描/连接/断开连接/扫描过程足以轮询后台是否存在设备。
上述结果是使用运行 iOS 5.0.1 的 iPhone 4S 收集的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)