响应设备锁定时的事件

时间:2012-03-11 18:11:06

标签: iphone objective-c ios alarm

我正在研究收音机闹钟,我有一些问题。 我正在使用警报的本地通知,因此如果应用程序未运行,它会有轻微的后退。

我很清楚设备的局限性,我知道当设备进入后台时我能做什么,不能做什么。

但我的问题是: 我已经看到其他应用程序在我锁定设备时启动音频流媒体。这怎么可能?可以在执行时间范围内吗?

实现这个的最佳方法是什么?当设备被锁定时,我能以任何方式激活流媒体会话吗?

修改

澄清:我知道如何在后台播放音频。但问题是当本地通知或其他事件触发时触发音频播放。

似乎这样做的一个应用是Radio Alarm Clock。我还没有尝试过很长一段时间。但似乎这样做。该应用的视频演示:http://www.youtube.com/watch?v=KJQiFOcdBWk

1 个答案:

答案 0 :(得分:3)

你已经宣布了你的后台任务吗?

  

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

     

audio - 该应用在后台播放用户的可听内容。 (此内容包括使用AirPlay播放音频或视频内容。)

iOS App Programming Guide - Implementing Long Running Background Tasks

您可以通过单击主项目图标添加此项,然后在“信息”选项卡下,可以将“必需的背景模式”添加到“自定义iOS目标属性”部分。 “App Plays Audio”将是三个默认值之一。

Big Edit with New Answer:

如果其他所有内容都已按顺序排列,您可以使用UIApplication方法让您的应用在后台运行

- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler

详细信息:UIApplication Class Reference

在此处举例:Hour 21: Building Background-Aware Applications

这允许您运行触发音乐播放器的NSTimer实例。这种方法和UILocalNotifications之间的区别在于,这种方法永远不会让应用程序完全进入后台模式,音乐播放器存在整个时间,这颠覆了从背景创建它的需要,这看起来是不可能的。

您可以设置多长时间的定时器,我在过去的14分钟内没有测试过。