background image

6

BOOL 

backgroundSupported

 = 

NO

;  

7

if ([device respondsToSelector:@selector(isMultitaskingSupported)])  

8

backgroundSupported

 = 

device

.multitaskingSupported; 

声明你需要的后台任务
Info.plist 中添加 UIBackgroundModes 键值,它包含一个或多个 string 的值,包括
audio:在后台提供声音播放功能,包括音频流和播放视频时的声音
location:在后台可以保持用户的位置信息
voip:在后台使用 VOIP 功能
前面的每个 value 让系统知道你的应用程序应该在适当的时候被唤醒。例如,一个应用程
序,开始播放音乐,然后移动到后台仍然需要执行时间,以填补音频输出缓冲区。添加
audio 键用来告诉系统框架,需要继续播放音频,并且可以在合适的时间间隔下回调应用
程序;如果应用程序不包括此项,任何音频播放在移到后台后将停止运行。
除了添加键值的方法,IOS 还提供了两种途径使应用程序在后台工作:
Task completion—应用程序可以向系统申请额外的时间去完成给定的任务
Local notifications—应用程序可以预先安排时间执行 local notifications 传递
实现长时间的后台任务
应用程序可以请求在后台运行以实现特殊的服务。这些应用程序并不连续的运行,但是会
被系统框架在合适的时间唤醒,以实现这些服务
1

  

、 追踪用户位置:略

2、在后台播放音频:
添加 UIBackgroundModes 中 audio 值,注册后台音频应用。这个值使得应用程序可以在后
台使用可听的背景,如音乐播放或者音频流应用。对于支持音频和视频功能的应用程序也
可以添加该值以保证可以继续持续的运行流。
当 audio 值设置后,当你的应用程序进入后台后,系统的多媒体框架会自动阻止它被挂断,
但是,如果应用程序停止播放音频或者视频,系统将挂断应用程序。
当你的应用程序在后台时,你可以执行任意的系统音频框架去初始化后台音频。你的应用
程序在后台时应该限制自身,使其执行与工作相关的代码,不能执行任何与播放内容无
关的任务
由于有多个应用程序支持音频,前台的应用程序始终允许播放音频,后台的应用程序也
被允许播放一些音频内容,这取决于 audio session object 的设置。应用程序应该始终设置
它们的 audio session object,并小心的处理其他类型的音频相关 notifications 和中断。详见
audio session programming guide。
3、实现 VOIP 应用:
VOIP 程序需要稳定的网络去连接和它相关的服务,这样它才能接到来电和其他相关的数
据。系统允许 VOIP 程序被挂断并提供组件去监听它们的 sockets,而不是在任意时候都处
于唤醒状态。设置 VOIP 应用程序如下:
A

 

、 添加 UIBackgroundModes 中的 VOIP 键值

B

 

、 为 VOIP 设置一个应用程序 socket

C

 

、 在移出后台之前,调用 setKeepAliveTimeout:handler:方法去建立一个定期执行的

handler,你的应用程序可以运行这个 handler 来保持服务的连接。
D

 

、 设置你的 audio session 去处理这种切换

释义:
A、大多数 VOIP 应用需要设置后台 audio 应用去传递音频,因此你应该设置 audio 和 voip
两个键值。