IOS(斯威夫特)背景演讲

时间:2017-01-30 07:29:44

标签: ios timer background speech

我正在编写一个运动应用程序,它运行一系列背靠背的计时器,这些计时器由用户练习和他们为他们输入的时间决定,例如推UPS 30秒,蹲20秒......

当计时器到达零时,应用程序会说下一个练习,然后启动下一个计时器。

该应用程序还允许用户在播放时播放播放列表中的音乐,因此我已在快速设置音频背景模式功能。

当处于前台时,一切都按预期工作,时间和语音会在它们被启动时触发,但是,当应用程序背景化时,只有音乐继续而其他一切都停止。

我知道Apple对后台进程和多任务处理有严格的规定,但是我已经下载了一些似乎在后台运行良好的应用程序,并且在它们到期时继续说出间隔(Seconds Pro,Onyx Timer等)。 )

我已经研究了好几天,但是无法得出答案,背景提取对于基于时间的应用来说似乎不够可靠,因为你无法保证什么时候会发射,我也看了进入本地通知,但是当它们触发时它们不允许发言,只是短暂的声音,它们也有64个通知的限制,这限制了用户可以设置的间隔量

我已设置应用程序以在计时器屏幕运行时保持屏幕清醒,但这意味着您必须在训练时保持屏幕开启,这反过来会增加电池的不必要的消耗,这似乎是反对苹果试图通过有限的背景活动完成的一切

推送通知似乎是一种解决方案,但这意味着我必须设置某种外部服务器,如果用户没有Internet连接,肯定会中断。​​

我已经阅读了多个关于人们在后台运行静音音频流的线程,以保持他们的应用程序在后台运行(未经Apple批准),但我的应用程序已经在后台播放音频并且对其余部分没有影响应用程序被暂停?

我将如何实现这一目标?

我想到了一种解决方法,但我不知道这是不错的做法,或者如果我尝试将其上传到应用程序商店会让应用程序被踢掉

我的解决方案是根据每个计时器中设置的时间排队我的演讲

for timer in 0...timersArray.count{

  let sentence = timer.speech
  let speechUtterance = AVSpeechUtterance(string: "\(sentence)")
  speechUtterance.postUtteranceDelay = timer.time
  synth.speakUtterance(speechUtterance)
}

然后,即使计时器没有在后台运行,语音也会在适当的时间触发

当我运行此代码时,它按预期工作,并且在计时器完成时触发语音(就像它正在运行一样)

虽然在运行此代码时,我注意到它不仅在正确的时间触发了语音,它还使我的应用程序在后台运行,这正是我想要的第一个。

这是允许练习,还是会从商店启动?

由于我的应用程序在后台播放音乐并具有音频功能设置,有没有一种方法可以使用类似的方法,但背景中的音乐,而不是排队的话语方法。

我尝试使用MPMediaPlayer,AVPlayer和AVQueuePlayer,但没有任何效果,音乐在后台播放,但应用程序的其余部分已停止

如果我在Plist.info中将“不在后台运行”设置为“是”,则应用程序现在会在屏幕锁定时运行,但它仍然不会在后台运行?

App Store中有如此多的应用似乎在后台运行愉快,我不敢相信这很难让它发挥作用?

我尝试过的很多都没有在通知中列出,所以我知道它不是本地通知,它们也可以在飞行模式下工作,所以它不能是远程推送通知

0 个答案:

没有答案