原创翻译:iOS 应用程序 蓝牙后台运行

摘要:
即使您的应用程序支持一个或两个核心蓝牙后台执行模式,它也不会永远运行。在iOS7中,CoreBluetooth支持存储中央和外围设备的状态信息,并在程序启动时将其恢复。用户可以使用这些警告来决定是否将应用程序带回前台。应遵循以下规范:应用程序应基于会话,并为用户提供一个界面,允许他们控制与蓝牙相关的事件。应用程序醒来后,有10秒时间处理事件,以便尽快再次切换到挂起状态。
 

  默认情况下,普通的CoreBluetooth 任务中的大多数,无论是Central还是peripheral ,在后台或者挂起状况下都是无法进行的。也就是说,你可以通过宣布你的应用程序支持后台处理模式来允许你的一个应用程序把你从一个挂起状态中唤醒来执行某些蓝牙相关的事件。

  即使你的应用程序支持一种或者两种CoreBluetooth后台执行模式,那么他也不会永远运行。在某些时候,系统也许由于当前的前台应用程序而终止你的应用程序来释放内存,这将会导致任何活跃的或者挂起的连接会丢失。在iOS7中,CoreBluetooth 支持为Central 和 Peripheral 储存状态信息并且在程序启动的时候,恢复这些状态信息。你可以使用这种技术来支持蓝牙设备的长期运行。

    • Foreground-only Apps

  像大多数的iOS app一样,如果你没有请求执行后台任务的权限,那么在app 进入后台模式之后会立刻进入到挂起状态。在挂起状态时,你的app将不能执行蓝牙相关的任务。在它恢复进入到前台模式之前,他也不会意识到并响应蓝牙相关的事件

  在Central端,没有宣称支持任何一种蓝牙后台模式的只支持前台的APP当他在后台时,或者进入挂起状态时,它都不能进行扫描,发现正在广播的Peripheral设备的任务。在Peripheral端,广播将会停止,并且任何Central尝试访问app已经发布的Service的动态Characteristic数据的时候,都会收到一个错误。

  取决于用例,这些默认的行为将会在各方面影响你的app。举个例子,想象你正在和你刚刚连接到的Peripheral上的数据进行交互。假设你的APP进入到了挂起状态(可能原因,如用户切换到了另一个app),如果连接到Peripheral的连接在你的APP挂起的时候丢失了,那么当你恢复到前台模式的时候你讲不会意识到任何断开连接的事件发生。

    •   Take advantage of Peripheral Connection Options

  当前台app进入到挂起状态时候发生的所有的蓝牙相关的事件都会被系统放到队列中,当APP回到前台的时候传递给APP。也就是说,当某个Central 事件发生的时候,Core Bluetooth 提供了一种提醒用户的方式。 用户可以使用这些警告来决定是否要将应用程序带回到前台。

你可以使用这些alerts,通过CBCentralManager在调用 connectionperipheral:options方法连接CBPeripheral的时候传入以下参数:

      • CBConnectionPeripheralOptionNotifyOnConnectionKey---当你想要你的系统在挂起状态时候,正好有一个连接成功执行,系统抛出一个连接警告 
      • CBConnectionPeripheralOptionNotifyOnDisconnectKey---当你想要你的系统在你的APP挂起状态收到任何断开连接事件的时候抛出一个断开连接警告
      • CBConnectionPeripheralOptionNotifyOnNotifycationKey---当你想要你的系统在你的APP处于挂起状态时候,收到的任何notification都爆出一个警告的时候使用
    • Core Bluetooth Background Execution Modes

    如果你的APP需要在后台运行执行某些蓝牙相关的任务,那么它必须宣布他支持一种蓝牙后台执行模式在它的Info.plist文件中。当你的app宣称这个之后,系统将会把它从挂起状态中唤醒来处理蓝牙相关的事件。这种支持对那些与BLE设备按照固定的时间间隔来交互的app来说是十分重要的,比如一个心率监测器。

   一个app可以支持的蓝牙后台运行模式有两种,一种是给实现了Central角色的app,另一种是给实现了Peripheral角色的appl.如果你的app两者都实现了,那么它也可以宣布它支持两种蓝牙后台执行模式。蓝牙后台模式可以通过在Info.plist添加UIBackgroundModes key,键值设置为一个包含以下字符串的数组:

      •  bluetooth-central,
      •  bluetooth-peripheral
    • The bluetooth-Central Background Execution Mode

  该模式下允许你的APP在后台执行某些蓝牙相关的工作。在后台也可以扫描连接到Peripheral,发现并且和Peripheral数据进行交互。除此之外当有任何CBCenralManagerDelegate 和CBPeripheralDelegate方法被调用的时候系统将会唤醒你的APP。

但是值得注意的是,scan 在前台和后台两种模式下是不一样的。在后台模式下的scan:

      • CBCenralManagerScanOptionAllowDuplicatsKey 会被汇率,一个advertsing Peripheral 被两次发现那么也只会合并成一个发现事件
      • 如果所有扫描peripheral的程序都运行在后台,那么发现Peripheral的时间间隔就会增加。
    • The bluetooth-Peripheral Background Execution Mode

该模式下系统会唤醒你的APP来处理read,write,subscription事件。后台模式下也允许你的APP进行广播。但是后台广播不同于前台:

      •  CBAdvertisementDataLocalNameKey 会被忽略,并且Peripheral的local name 不会被广播
      •  所有包含在CBAdvertismentDataServiceUUIDsKey 中的Services UUIDs 将会被放在overflow”区域;他们只被那些明确的扫描他们的设备发现。
      •  如果所有广播的APP都在后台,那么发送广播的频率将会降低
    • Use Background Execution Modes Wisely

后台模式很有用,但是请你慎用,因为后台模式要经常使用无线电,这是很费电的。 需要遵循以下几条规范:

      •  app 应该基于会话,并且提供界面给用户,允许他们控制开关蓝牙相关的事件
      •  app 被唤醒后有10秒钟处理事件,保证尽可能快,以便再次切换到挂起状态。在后台中花费太多的时间将会被系统拒绝或者杀掉。
      •  被唤醒后APP不要执行与唤醒原因无关的事情

免责声明:文章转载自《原创翻译:iOS 应用程序 蓝牙后台运行》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇3、perl进阶Lamda表达式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WordPress快速打造个人博客

前些天用wordpress搭建了现在这个博客,所以总结了一篇文章,讲讲怎么样简单的创建一个博客。开始前这里有篇我搭建时所遇到的问题可以作为参考《WordPress建站注意事项》,首先我们要下载WordPress压缩包(这个建议到官网上下最新的保险些:https://cn.wordpress.org/),下载下来是长这个样子的   ,   之后我们要通过 “...

[蓝牙] 3、 剖析BLE心率检测工程

位于:<KEIL path> ARMDeviceNordic rf51822Boardpca10001s110le_app_hrs  Heart Rate Example The Heart Rate Application is a firmware example that implements the Heart Rate prof...

iOS开发中的这些权限,你搞懂了吗?

写在前面 APP开发避免不开系统权限的问题,如何在APP以更加友好的方式向用户展示系统权限,似乎也是开发过程中值得深思的一件事; 那如何提高APP获取iOS系统权限的通过率呢?有以下几种方式:1.在用户打开APP时就向用户请求权限;2.告知用户授权权限后能够获得好处之后,再向用户请求权限;3.在绝对必要的情况下才向用户请求权限,例如:用户访问照片库时请求...

【物联网智能网关13】Html5:Canvas+WebSocket实现远程实时通信(上)

在上一篇博文《网关为核心,互联网为基础构建物联网平台》中简要介绍了基于.NET Micro Framework如何构建Web Server应用,本篇文章将基于Html5的Canvas和WebSocket技术详细介绍远程实时通信的实现。 无论是windows还是linux平台都已提供现成的Web Server技术,在服务端支持诸如ASP.net、ASP、PH...

Winserver 2012 R2 安装VS2015报错解决办法

安装过程中的故障排除 [03EC:1BA4][2015-01-24T18:18:27]i000: MUX: Stop Block: KB2919355OnBlue : 此版本的 Visual Studio 的需要对 Windows 8.1 和称为 !!http://go.microsoft.com/fwlink/?LinkId=403643&clc...

什么是系统封装

什么是系统封装   系统封装,说简单就是把系统制作成镜像的方法刻录到光盘,用在系统安装上面。系统封装,不同于系统的正常安装。最本质的区别在于 系统封装 是将一个完整的系统以拷贝的形式打包,然后用粘贴的形式安装在另外一个系统盘上,而正常安装则是通过 Setup程序进行安装。 举一个不太贴切的例子,你要铺草坪,你可以在那片土地上撒草籽等待草的长成,也可以直...