0

我想知道我是否在 iPhone 上安装了广播流媒体应用程序,是否可以让应用程序在后台运行时自动切换到新电台?到目前为止,我听说苹果不允许在后台执行任何操作。只有一些处于特定状态的事件被允许运行,直到这些状态结束。

非常感谢

4

1 回答 1

1

根据iOS 开发人员文档,这是可能的。

在 iOS 4 及更高版本中,多任务处理允许应用程序在用户切换到另一个应用程序后继续在后台运行,同时仍尽可能延长电池寿命。大多数应用程序在进入后台后不久就会进入暂停状态。只有向用户提供重要服务的应用程序才能继续运行任意时间。

鼓励您尽可能避免在后台执行并让您的应用程序暂停。如果您发现需要执行后台任务,以下是一些合适的指导原则:

您需要至少实现几种特定用户服务中的一种。
您需要执行一个有限长度的任务。
当您的应用程序未运行时,您需要使用通知来提醒用户一些相关信息。
系统会尽可能长时间地将暂停的应用程序保留在内存中,仅当可用内存量变低时才将其删除。保留在内存中意味着您的应用程序的后续启动要快得多。同时,暂停意味着您的应用不会很快耗尽设备的电池。

接着...

对于需要更多执行时间来实现的任务,您必须请求特定权限才能在后台运行它们而不会被挂起。在 iOS 中,只允许特定类型的应用程序在后台运行:

在后台向用户播放可听内容的应用程序,例如音乐播放器应用程序 让用户随时了解其位置的应用程序,例如导航应用
程序 支持互联网协议语音 (VoIP)的
应用程序 报亭应用程序下载和处理新内容
从外部附件接收定期更新的
应用程序 实现这些服务的应用程序必须声明它们支持的服务并使用系统框架来实现这些服务的相关方面。声明服务让系统知道您使用了哪些服务,但在某些情况下,实际上是系统框架阻止了您的应用程序被挂起。

对某些类型的后台执行的支持必须由使用它们的应用程序提前声明。应用程序使用其 Info.plist 文件声明对服务的支持。将 UIBackgroundModes 键添加到 Info.plist 文件中,并将其值设置为包含以下一个或多个字符串的数组:

音频——应用程序在后台向用户播放可听内容。(此内容包括使用 AirPlay 的流式音频或视频内容。) 位置 - 该应用程序让用户随时了解他们的位置,即使它在后台运行时也是如此。
voip——该应用程序使用户能够使用 Internet 连接拨打电话。
newsstand-content - 该应用程序是一个 Newsstand 应用程序,可在后台下载和处理杂志或报纸内容。
external-accessory - 该应用程序与需要通过外部附件框架定期提供更新的硬件附件配合使用。
bluetooth-central — 该应用程序与需要通过 CoreBluetooth 框架定期提供更新的蓝牙配件配合使用。
前面的每个值都让系统知道您的应用程序应该在适当的时间被唤醒以响应相关事件。例如,一个开始播放音乐然后移动到后台的应用程序仍然需要执行时间来填充音频输出缓冲区。包含音频键会告诉系统框架它们应该继续播放并以适当的时间间隔对应用程序进行必要的回调。如果应用程序不包含此键,则当应用程序移至后台时,应用程序正在播放的任何音频都会停止。

连续播放音频的应用程序(即使应用程序在后台运行)可以通过在其 Info.plist 文件中包含 UIBackgroundModes 键(具有值音频)来注册为后台音频应用程序。包含此密钥的应用程序必须在后台向用户播放有声内容。

背景音频应用程序的典型示例包括:

音乐播放器应用程序 支持通过 AirPlay VoIP 应用程序
播放音频或视频的应用程序 当 UIBackgroundModes 键包含音频值时,系统的媒体框架会自动阻止相应的应用程序在移动到后台时被挂起。只要它正在播放音频或视频内容,应用程序就会继续在后台运行。但是,如果应用程序停止播放音频或视频,系统将暂停它。

您可以使用任何系统音频框架来启动背景音频的播放,并且使用这些框架的过程不变。(对于通过 AirPlay 播放视频,您必须使用 Media Player 框架来呈现您的视频。)因为您的应用在播放媒体文件时不会暂停,所以当您的应用在后台时,回调正常运行。但是,在您的回调中,您应该只做为回放提供数据所必需的工作。例如,流式音频应用程序需要从其服务器下载音乐流数据并将当前音频样本推送出去以进行播放。您不应执行任何与播放无关的无关任务。

由于可能有多个应用程序支持音频,因此系统会限制哪些应用程序可以在任何给定时间播放音频。前台应用程序始终有权播放音频。此外,根据其音频会话对象的配置,还可能允许一个或多个后台应用程序播放一些音频内容。您应该始终适当地配置应用程序的音频会话对象,并仔细使用系统框架来处理中断和其他类型的音频相关通知。有关如何为后台执行配置音频会话对象的信息,请参阅音频会话编程指南。

要阅读完整的文档,请转到答案开头的链接并转到标题Background Execution and Multitasking。记得检查安装应用程序的设备是否有多任务处理;只有 iOS4+ 设备有它。

于 2012-06-05T02:54:18.133 回答