【发布时间】:2013-02-28 04:13:42
【问题描述】:
前言:我正在构建一个闹钟应用程序。许多其他闹钟应用程序(例如 Alarm Clock Pro)能够在屏幕锁定且应用程序位于前台时播放闹钟。他们的警报可以无限播放时间,并且可以使用系统音量逐渐增加音量。他们也不控制音乐控件(如果您打开多任务屏幕并滚动播放音频,您将看不到他们的图标)
我在重现该功能时遇到了一些问题。
要在应用程序处于前台时播放警报,我们会触发本地通知,效果很好。屏幕锁定时我取得了一些有限的成功(应用程序处于非活动状态)
我使用了以下方法:
当屏幕锁定时,每秒运行一个
NSTimer并执行一个后台任务。我设法让应用程序在最长 10 分钟后保持打开状态,但我无法播放声音。时间到了-
使用
AVAudioPlayer播放 1 秒的静音。当声音结束时,重新播放声音并检查应用程序是否处于非活动(锁定屏幕)状态。如果它处于锁定屏幕状态并且是时候播放警报,请播放它。这里的问题是我必须使用[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
以便在歌曲处于后台时继续更新歌曲。该方法将在音乐控件中显示 Wake 并停止我们想要避免的任何当前正在播放的音乐。
- #1 和#2 的组合。当应用程序打开时,无限重复播放无声的声音。当屏幕被锁定时,会触发一个计时器来检查是否是时候播放警报了。当需要播放警报时,将静音声音切换为警报声音。系统最终会强制关闭应用
有帮助但没有解决我的问题的相关知识:
- How do I start playing audio when in silent mode & locked in iOS 6?
- iOS 5 deep sleep prevention
- Resuming execution of code after interruption while app is in background
- How to play music in background iphone sdk
总结:当屏幕被锁定并且应用程序处于前台时,我无法阻止进程在 10 分钟后被杀死。
更新
我最终使用了https://github.com/mruegenberg/MMPDeepSleepPreventer,它让我在 10 分钟后播放声音。但是,这会像疯了一样消耗电池。我需要找到更有效的解决方案。
更新 2
我从应用商店下载了一些http://marcopeluso.com/ 应用。他是深度睡眠预防器的创造者。我下载了他的一些应用程序并进行了一些仪器测试,发现他的应用程序没有像我的应用程序那样消耗电池电量(大约每小时 2.5%,正如他的博客某处声称的那样)。我非常确定我需要优化我的应用程序,电池耗尽问题将消失,我的问题将得到解决!
更新 3 我最终使用了https://github.com/mruegenberg/MMPDeepSleepPreventer
我在它自己单独的 xCode 项目中运行它,当应用程序在后台时它只使用 0.5% 的 cpu。原来是我的应用程序在吸cpu。所以现在一切都很好:)
【问题讨论】:
-
为了总结你的问题,你是否可以让它工作,但在屏幕锁定后最多只能工作 10 分钟?
-
底部加粗总结,希望对您有所帮助
-
我知道您的应用程序在前台,但您可以尝试使用“背景音乐”和“后台任务”来解决您的问题。可以在此处找到教程:mobile.tutsplus.com/tutorials/iphone/ios-sdk_background-audio 我假设前台进程在 10 分钟后停止以节省电池。
-
这没有用,但它确实github.com/mruegenberg/MMPDeepSleepPreventer 但是!它非常消耗电池。我需要找到一种更有效的方法来做到这一点
标签: iphone ios background screen locked