CoreBluetooth应用程序在后台可以做什么?

Chr*_*ton 78 ios core-bluetooth

受试者说的都是,真的.文档,就其本身而言,表明针对在iOS设备上运行的CoreBluetooth框架编写的应用程序可以在其背景权限列表中添加"蓝牙中心",因此在处于非活动状态时处理某种蓝牙事件,但是确切的事件是不送货?

例如:

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

Chr*_*ton 120

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

在前台运行时,您可以使用CBCentralManager :: scanForPeripheralsWithServices开始扫描.您的扫描可以限制为广告特定服务的设备,或者不受限制(对于该呼叫的参数传递nil).它也可以允许禁止重复 ; 在前一种情况下,每次iPhone收到广告包时,你都会得到一个didDiscoverPeripheral回调; 在后者中,每个设备只能找到一个回调.

输入背景时,规则显示如下:

  • 如果您正在运行不受限制的扫描,它将被静默取消.你不会得到任何didDiscover回调.
  • 如果您的扫描受到限制(即您指定了一个或多个您正在寻找的服务UUID),您的扫描将继续运行,但将忽略allow duplicates标志.这意味着您现在只能获得设备的didDiscoverPeripheral回调.如果在前台看到所有设备,则根本不会收到任何回调.
  • 启动和停止扫描不会重置哪些设备被视为新设备.如果存在一个设备,您将只获得一次回调,即使是多次扫描,除非......
  • 如果您连接到设备,然后断开连接,然后再次扫描,将再次枚举设备(即您将再次调用didDiscoverPeripheral).我想iOS认为它在设备中"显示出兴趣".

我不知道连接尝试不可连接设备(例如BLE广告商,如实现邻近配置文件的设备)是否足够好,因为我的示例设备是可连接的.但是,至少对于可连接的设备,此扫描/连接/断开/扫描过程足以轮询设备在后台的存在.

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

  • 如果你上次连接它之后还没有看过它,它就不存在了.如果你已经看过它,我知道再次发现它的唯一方法是*在后台*是尝试连接. (3认同)
  • 嘿克里斯.有趣!我不明白一件事.如果与蓝牙设计通信,进程是否可以在后台继续运行?(例如,我可以连接心率监测器,然后将应用程序移动到后台并期望它继续运行吗?) (2认同)
  • 嗨本.它不会像在前台那样继续运行,但是当我上面描述的蓝牙事件发生时,它将继续执行.我遇到的一个问题是,即使在这种情况下,当一段时间没有用户交互时,手机将进入睡眠状态,应用程序将停止被调用.我通过注册(错误地)作为音频应用程序来解决这个问题,这可以防止暂停; 然而,对于应用程序商店来说,这显然是不可接受的. (2认同)

mas*_*ash 9

除了克里斯的回答:

  • 如果您的应用具有"蓝牙中央"背景模式并连接到外围设备,您可以peripheral:didUpdateValueForCharacteristic:error:在后台接收来自外围设备的通知(),即使在10分钟后也是如此.

因此,当您想要在后台持续运行时,您有两个选择:

  • 运行"连接,断开连接,再次扫描"循环
  • 使外围设备发送通知

后来应该是来自WWDC 2012核心蓝牙视频的"事件背景" https://developer.apple.com/videos/wwdc/2012/ 但前者看起来像黑客,我不想依赖它.

我在iPhone5,iOS6.1.4上测试了这个


Apple终于发布了Core蓝牙编程指南,这里是官方说明

适用于iOS应用的核心蓝牙背景处理


use*_*108 7

注意背景和CoreBluetooth与iBeacons相关的行为也很好,尽管Apple喜欢将其视为CoreLocation功能:

  1. 当打开iBeacon区域的通知时,它们将通知用户区域进入或退出.可以使这些通知取决于显示器是打开还是关闭.即使请求通知的应用程序在后台,这些通知也会起作用.(这在文档中很清楚).

  2. 不太明显:如果您使用iBeacon测距API,那么您的应用必须位于前台.它没有在文档中明确说明这一点 - 实际上,人们可能误以为范围应该在文档的后台工作.然而,一位苹果工程师在Apple开发者论坛的长篇帖子中隐藏了这个帖子,我也看到了这个失败.测距仅适用于前景.

  3. 人们可以发现外围广告iBeacons正在宣传的其他服务.但这只能在前台工作.因此,如果您希望使用iBeacons通知中心接近,然后使用其他基于BLE的服务执行其他一些事务,这将起作用,但仅限于前台.它不会在后台运行.对于在后台使用基于BLE的服务的交易,广告必须是常规的BLE广告,而不是iBeacon.您不能使用iBeacon广告在后台帮助发现过程,然后切换到在后台使用BLE服务.(我非常希望这可以工作,但没有骰子).