在设备被锁定时响应事件

Posted

技术标签:

【中文标题】在设备被锁定时响应事件【英文标题】:Responding to events when device has been locked 【发布时间】:2012-03-11 18:11:06 【问题描述】:

我正在制作收音机闹钟,但遇到了一些问题。 我正在为警报使用本地通知,因此如果应用程序未运行,它会有一个温和的回退。

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

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

实现这一点的最佳方法是什么?有什么方法可以在设备锁定时激活流会话?

编辑

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

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

【问题讨论】:

当我早些时候回答时,我认为这比它更容易,在尝试实现它时我遇到了同样的问题。你能告诉我其他使这项工作发挥作用的应用程序吗? 编辑了我的答案以指出一个可以做到这一点的应用程序。 看起来这毕竟是可能的,我编辑了我的答案以包含解决问题的新方法 我正在开发一个类似的应用程序并遇到同样的问题......我不认为他们(有这个问题的警报应用程序)正在使用保持清醒的方法(无声音频或 beginBackgroundTaskWithExpirationHandler ) 据我所知,如果你打回家 BTN,他们就不会工作。他们应该使用保持清醒的方法。静音音频方法会消耗大量电池,并且在某些情况下可能会中断。我碰到了你的线程,我有一个类似的线程 here 有一些信息。 ...另外,我用同样的问题支付了苹果的支持票,我会让你知道他们说什么。 【参考方案1】:

你是否已经声明了你的后台任务?

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

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

ios App Programming Guide - Implementing Long Running Background Tasks

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

新答案的大编辑:

如果其他一切都安排妥当,您可以使用 UIApplication 方法让您的应用在后台运行

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

在此详述:UIApplication Class Reference

这里有一个例子:Hour 21: Building Background-Aware Applications

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

您可以设置的计时器时长可能有限制,我在过去 14 分钟内没有测试过。

【讨论】:

听起来不错,我进行了编辑以包括将声明添加到项目的位置。 谢谢,我知道这一点,但这实际上不是我要问的。我知道背景模式和背景音频。但我真正想要的是将来在应用程序中触发一些东西。查看我编辑的第一个问题以获取更多信息。 谢谢,我接受了这个答案,因为我认为我会工作,这是一个很好的答案。但它在我的用例中不起作用。我所做的是实施 MMPDeepSleepPreventer 可以在这里找到:github.com/marcop/MMPDeepSleepPreventer 无论如何感谢所有帮助! :-) 你在 8 小时后让它工作了吗?我遇到了我的音频无法播放但可能只需要一些调整的情况.. 看来我使用 MMPDeepSleepPreventer 的方法已经持续了很长时间。不知道还有多久。

以上是关于在设备被锁定时响应事件的主要内容,如果未能解决你的问题,请参考以下文章

应用程序暂停时如何在 iPhone 上获取屏幕锁定/解锁事件?

当活动方向被锁定时检测设备方向

iOS设备方向无视方向锁定

在设备锁定时播放 iPod 库中的音频

当设备被蓝牙耳机锁定时,AVAsset 无法播放

设备锁定时如何继续录制视频?