objective-c - 后台运行的 iOS 7 核心蓝牙外设

标签 objective-c bluetooth ios7 core-bluetooth bluetooth-lowenergy

我想要的是让我的 iOS 设备始终通告蓝牙 LE 服务,即使应用程序未运行时也是如此,这样我就可以让另一台 iOS 设备扫描并找到它。我在这里遵循了 Apple 的背景说明:

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/PerformingCommonPeripheralRoleTasks/PerformingCommonPeripheralRoleTasks.html#//apple_ref/doc/uid/TP40013257-CH4-SW1 .

我可以让它在前台做广告,有时在后台做广告,但它不会一直做广告。如果您将其设置为在后台运行,即使在设备重启后它不应该开始播放广告,就像后台定位服务在重启后自动开始工作一样吗?他们对 Apple 文档中未列出(或很难找到)的背景的限制吗?有没有人有 Core Bluetooth 外设在后台正确广告的示例?

谢谢...

最佳答案

如果您将 bluetooth-peripheral 后台模式添加到应用程序的 plist,则后台广告是可能的。执行此操作后,您的应用将继续接收回调,即使在后台也是如此。

广告是一个棘手的野兽,因为 Apple 实现了多项优化以降低功耗,一旦应用程序进入后台,这些就会降低广告的质量。即:费率大幅降低,广告服务不包括在内,本地名称也不包括在内。一旦应用返回前台,这些限制就会失效。

一般情况下,这种后台操作需要应用处于运行状态。在 iOS 7 中,恢复过程已经实现,允许操作系统在应用程序终止时代表应用程序执行操作,并在某些传输或其他操作迫在眉睫时恢复应用程序。这需要您将恢复 key 添加到 CBPeripheralManager/CBCentralManager 的初始化选项中。仍然需要启动您的应用程序一次,但在那之后,iOS 将继续充当中央/外围设备的 BLE 门面。

更新:我也在 Apple bluetooth-dev 列表上循环运行了这个问题,发现 Core Bluetooth 管理器是 declared to be not able to restore after reboot .这在任何文档中都没有描述,但可能在 WWDC 视频中提到过。我们应该提交错误并复制它以提高 Apple 的知名度。

关于objective-c - 后台运行的 iOS 7 核心蓝牙外设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234654/

相关文章:

ios - 无法写入或读取 CBPeripheral | CBMutableCharacteristic

ios - dataWithContentOfFile 返回零

objective-c - CGFontGetGlyphBBoxes 错误结果

ios - 如何拦截点击 AVPlayerViewController 中的完成按钮?

objective-c - 如何在标题更改时停止不需要的 UIButton 动画?

Objective-C 相当于 Java 包?

linux - 存在哪些类型的蓝牙设备?

iOS Core 蓝牙状态保存和恢复问题

ios - 从我的应用程序内调用应用程序不起作用

ios7 - NavigationController 中的 UIPageViewController