主题说明了一切,真的。文档,就其本身而言,表明针对在iOS设备上运行的CoreBluetooth框架编写的应用程序可以添加" bluetooth-central"到他们的后台特权列表,因此在处于非活动状态时处理某种蓝牙事件,但确切的事件是否会被传递?
例如:
答案 0 :(得分:119)
似乎没人知道,所以我买了一个iOS开发者帐户并进行了一些实验。这是我发现的:
在前台运行时,您可以使用CBCentralManager :: scanForPeripheralsWithServices开始扫描。您的扫描可以限制到广告特定服务的设备,或不受限制(对该调用的参数传递nil)。它还可以允许或禁止重复;在前一种情况下,每次iPhone收到广告包时,你都会得到一个didDiscoverPeripheral回调;在后者中,每个设备只能找到一个回调。
当您输入背景时,规则显示如下:
我不知道对不可连接设备(例如BLE广告商,如实现邻近配置文件的设备)的连接尝试是否足够好,因为我的示例设备是可连接的。但是至少对于可连接的设备,此扫描/连接/断开/扫描过程足以轮询设备在后台的存在。
以上结果是使用运行iOS 5.0.1的iPhone 4S收集的。
答案 1 :(得分:9)
除了克里斯的回答:
peripheral:didUpdateValueForCharacteristic:error:
)。因此,当您想要在后台持续运行时,您有两个选择:
稍后应该是来自WWDC 2012核心蓝牙视频的“事件背景”https://developer.apple.com/videos/wwdc/2012/ 但前者看起来像是黑客,我不想依赖它。
我在iPhone5,iOS6.1.4
上测试了这个Apple最终发布了Core Bluetooth Programming Guide,这是关于
的官方说明答案 2 :(得分:7)
同样值得注意的是背景和CoreBluetooth与iBeacons相关的行为,尽管Apple喜欢将其视为CoreLocation功能:
当打开iBeacon区域的通知时,它们将通知用户区域进入或退出。可以使这些通知取决于显示器是打开还是关闭。即使请求通知的应用程序在后台,这些通知也会起作用。 (这在文档中很清楚)。
不太明显:如果您使用iBeacon测距API,那么您的应用必须位于前台。它没有在文档中明确说明这一点 - 实际上,人们可能误以为范围应该在文档的后台工作。然而,一位苹果工程师在Apple开发者论坛的长篇帖子中隐藏了这个帖子,我也看到了这个失败。测距仅适用于前景。
人们可以发现外围广告iBeacons宣传的其他服务。但这只能在前台工作。因此,如果您希望使用iBeacons通知中心接近,然后使用其他基于BLE的服务执行其他一些事务,这将起作用,但仅限于前台。它不会在后台运行。对于在后台使用基于BLE的服务的交易,广告必须是常规的BLE广告,而不是iBeacon。您不能使用iBeacon广告在后台帮助发现过程,然后切换到在后台使用BLE服务。 (我非常希望这可以工作,但没有骰子)。
答案 3 :(得分:4)
我刚刚在iOS8.3&amp ;;上学习了BLE设备的后台模式。 8.4并且发现了与上面的一些差异:
如果我开始
[centralManager scanForPeripheralsWithServices:@ [[CBUUID UUIDWithString:kServiceUUID]]选项:@ {CBCentralManagerScanOptionAllowDuplicatesKey:@YES}];
这
- (void)applicationDidEnterBackground:(UIApplication *)application
我发现每次使用不同的RSSI调用枚举都会返回相同的设备, 所以CBCentralManagerScanOptionAllowDuplicatesKey不会被忽略。