在后台运行应用程序,播放一些音频和加速度计



我被困住了几天。基本上,我正在开发一个play some audios指导用户的应用程序(用户无法控制这些音频,无需播放/暂停),并且付费音频它还使用accelerometer来获取数据和calculate some results from this data with regular interval.意味着我正在播放一些音频,然后启动加速度计大约 4 次
一切都按预期工作,但是当应用程序进入后台应用程序时,应用程序会保持活动状态一段时间,操作系统终止/终止application.
基本上整个流程至少需要 6 到 7 分钟,这意味着我的应用程序需要在后台模式下至少存活 7 分钟。我见过堆栈溢出问题,但没有成功.
用户启动时使用的内容

self.backgroundTaskID = UIApplication.shared.beginBackgroundTask (withName: "Finish Network Tasks") {
// End the task if time expires.
UIApplication.shared.endBackgroundTask(self.backgroundTaskID!)
self.backgroundTaskID = UIBackgroundTaskIdentifier.invalid

}

self.startForFirsPhase()

当第一阶段结束时,我开始第二阶段和第三阶段结束后

  • 我在info.plist中添加了Required background modes
  • Background ProcessAudio, AirePlay and Picture in PictureSigning & Capabilities

播放音频的代码是吹的

func play(name: String, volumeLevel: Float? = 1) {
//        print("NameForAudio: ", name)
guard let path = Bundle.main.path(forResource: name, ofType: nil) else {
print("can not find path")
return
}
let url = URL(fileURLWithPath: path)
do {
try AVAudioSession.sharedInstance().setCategory(.playback)
try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
self.audioPlayer = try AVAudioPlayer(contentsOf: url)
self.audioPlayer.volume = volumeLevel ?? 1
self.audioPlayer!.play()
} catch {
print("some thing went wrong Name: (error)")
}
}

所有的音频都喜欢加速度计,我使用DispatchQueue.main.asyncAfter(deadline: .now() + durationOfPreviousAudio)一个接一个地播放一些音频

我想做的是。我一个接一个地播放一些音频,然后启动加速度计以获取一些运动传感器数据 1 分钟,然后我再次想播放一些音频,之后没有UIApplication.shared.beginBackgroundTask播放。

您不需要(也不应该使用)beginBackgroundTask。这是对系统的提示,即您正在开始一项短期任务,如果应用程序在任务结束之前进入后台,那么通过获得一点额外的完成时间将受益。这用于将数据保存到文件系统或完成网络操作等操作。

"后台进程"是一个完全不同的工具,用于长时间运行的实用程序进程,例如优化数据库或运行学习算法。您不应该为此使用它。

如果要播放背景音频,则必须使用背景音频模式。请参阅链接的文档,了解如何配置此设置以及如何控制背景音频。(您可能已经在 Xcode 中选中了正确的配置框,但您还需要确保已配置并激活了与您的用例匹配的 AVAudioSession。您可能想要.playback并且可能需要.mixWithOthers。它通常需要不断播放。例如,您不能在将来的任意时间轻松启动音频。

您可能还会从启用后台位置事件中受益。

iOS 中没有通用的"在后台运行"工具。有几种专门的工具可以解决特定问题,您需要使用与您的用例相匹配的工具。iOS 中的后台操作很复杂,您需要阅读有关您使用的每个工具的文档,了解如何配置它以及它允许和不允许什么。

整个流程至少需要 6 到 7 分钟,这意味着我的应用程序需要在后台模式下至少存活 7 分钟

你做不到。没有 iOS 功能允许应用在后台保持活动状态 7 分钟以读取加速计。您需要更改规格以适应现实。

最新更新