Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在应用程序位于前台且屏幕锁定时播放声音-iOS_Iphone_Ios_Background_Screen_Locked - Fatal编程技术网

Iphone 在应用程序位于前台且屏幕锁定时播放声音-iOS

Iphone 在应用程序位于前台且屏幕锁定时播放声音-iOS,iphone,ios,background,screen,locked,Iphone,Ios,Background,Screen,Locked,前言:我正在构建一个闹钟应用程序。许多其他闹钟应用程序(如alarm Clock Pro)可以在屏幕锁定且应用程序位于前台时播放闹钟。它们的警报可以无限时间播放,并且可以使用系统音量逐渐增大音量。它们也不控制音乐控制(如果打开多任务屏幕并滚动到播放音频,您将看不到它们的图标) 我在复制该功能时遇到了一些问题 要在应用程序处于前台时播放警报,我们会触发本地通知,这非常有效。当屏幕被锁定(应用程序处于非活动状态)时,我取得了一些有限的成功 我使用了以下方法: 当屏幕锁定时,使用后台任务每秒运行一次N

前言:我正在构建一个闹钟应用程序。许多其他闹钟应用程序(如alarm Clock Pro)可以在屏幕锁定且应用程序位于前台时播放闹钟。它们的警报可以无限时间播放,并且可以使用系统音量逐渐增大音量。它们也不控制音乐控制(如果打开多任务屏幕并滚动到播放音频,您将看不到它们的图标)

我在复制该功能时遇到了一些问题

要在应用程序处于前台时播放警报,我们会触发本地通知,这非常有效。当屏幕被锁定(应用程序处于非活动状态)时,我取得了一些有限的成功

我使用了以下方法:

  • 当屏幕锁定时,使用后台任务每秒运行一次
    NSTimer
    。我设法让应用程序打开超过了10分钟的上限,但我无法播放声音。到时候

  • 使用
    AVAudioPlayer
    播放1秒无声声音。声音结束后,重放声音并检查应用程序是否处于非活动(锁定屏幕)状态。如果它处于锁定屏幕状态,是时候播放警报了,请播放它。这里的问题是我必须使用

    [[UIApplication sharedApplication]开始接收RemoteControlEvents]

  • 以便在歌曲处于后台时继续更新歌曲。该方法将在音乐控件中显示Wake,并将停止我们希望避免的任何当前播放的音乐

  • 1和2的组合。当应用程序打开时,在无限重复中播放无声声音。当屏幕被锁定时,启动一个计时器,以检查是否该播放警报。当播放警报时,将静音切换到警报声。系统最终将强制关闭该应用程序
  • 有帮助但没有解决我问题的相关知识:

  • 摘要:当屏幕被锁定且应用程序处于前台时,我无法阻止进程在10分钟后停止。

    更新

    最后我用了一个能让我在10分钟后播放声音的装置。然而,这会疯狂地消耗电池。我需要找到一个更有效的解决方案

    更新2

    我从应用商店下载了一些应用程序。他是深度睡眠预防器的创造者。我下载了他的一些应用程序,并进行了一些仪器测试,发现他的应用程序并没有我的应用程序耗电那么多(大约是他博客上声称的每小时2.5%)。我非常确定,我需要优化我的应用程序,电池耗电问题将消失,我的问题将得到解决

    更新3 我最终使用了


    我在它自己单独的xCode项目中运行它,当应用程序在后台时,它只使用0.5%的cpu。原来是我的应用程序在吸cpu。因此,现在一切都正常了:)

    即使你的应用程序在设备打开时处于前台,锁定后也会转到后台(调用willresignactive)。 现在,从我在互联网上收集的信息来看,你不应该自己循环声音,而应该在你的主应用包中提供以下格式之一的自定义音乐文件:

    • 线性PCM
    • MA4(IMA/ADPCM)
    • µ定律
    • 阿拉
    自定义声音只能为30秒或更短。 初始化UILocalNotification对象后,需要设置其firedate属性,即触发通知的日期和时间(也重复)。 然后通过alertBody(如“唤醒”)设置警报消息,并通过alertAction设置警报按钮上的字符串。自定义声音的文件名进入soundName属性。 您可以通过调用scheduleLocalNotification:(UIApplication方法)来显示通知实例请注意,您调用此方法的时间不需要也通常不是通知将触发的时间。即使设置了定期通知,您也只需调用此方法一次。您可以通过调用cancelLocalNotification来取消此方法:。现在,无论你的应用程序处于前台、后台还是未打开,闹钟都会播放


    一切就绪。

    请参阅我上面的回答。不过基本上

    我最终使用了


    我在它自己单独的xCode项目中运行它,当应用程序在后台时,它只使用0.5%的cpu。原来是我的代码杀死了cpu。现在一切都好了

    为了总结您的问题,您是否可以让它工作,但在屏幕锁定后最多只能工作10分钟?在底部添加了一个粗体的摘要,希望它有助于我知道您的应用程序处于前台,但您可以尝试通过“背景音乐”和“背景任务”来解决您的问题。可以在这里找到一个教程:我假设前台进程在10分钟后停止以节省电池。这不起作用,但确实起作用了!电池耗电量很大。我需要找到一个更有效的方法来做到这一点嘿,谢谢你的回复,但这不是一个理想的解决方案,我在做什么。如果您使用过任何良好的闹钟应用程序,当屏幕锁定且其应用程序位于前台时,无论您的系统设置音量和静音设置如何,闹钟都会播放。有一个看似合理的解决方案,使用本地通知和重复,但它们无法提供良好的用户体验,因为用户必须确保应用程序在睡觉前不会静音,从而使应用程序无法作为警报。我希望您能找到一种可靠的方法,使您的应用程序在设备锁定时不会被杀死。但即便如此,作为一个闹钟用户,我也不想记得打开你的应用程序(每次我关闭和打开设备时),因为否则闹钟就不会响了