我已经被困了好几天了。基本上,我正在开发一个应用程序 play some audios
引导用户(用户无法控制这些音频,不能播放/暂停),并且对于付费音频,它也使用 accelerometer
获取数据和calculate some results from this data with regular interval.
意味着我正在播放一些音频,然后启动加速度计大约 4 次
一切都按预期工作,但是当应用程序进入后台时,应用程序将保持事件状态一段时间,并且操作系统终止/终止应用程序。
基本上整个流程至少需要 6 到 7 分钟,这意味着我的应用程序需要在后台模式下运行至少 7 分钟。我见过stackOverFlow questions但没有成功。
用户启动时我正在使用什么
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()
当第一阶段结束时,我在上一个阶段结束后开始第二阶段和第三阶段
- 我已添加
Required background modes
在info.plist
-
Background Process
和Audio, AirePlay and Picture in Picture
在Signing & 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
。这向系统暗示您正在开始一项短期任务,如果应用程序在任务结束之前进入后台,则可以通过获得一点额外的时间来完成。这用于将数据保存到文件系统或完成网络操作等。
“后台进程”是一个完全不同的工具,用于长时间运行的实用程序进程,例如优化数据库或运行学习算法。您不应该将其用于此目的。
如果您正在播放背景音频,则必须使用background audio mode 。请参阅链接的文档,了解如何配置它以及如何控制背景音频。 (您可能已经在 Xcode 中选中了正确的配置框,但您还需要确保已配置并激活与您的用例匹配的 AVAudioSession。您可能需要 .playback
并且可能想要.mixWithOthers
。)一般需要连续播放。例如,您无法在将来的任意时间轻松启动音频。
您可能还会受益于enabling background location events .
iOS 中没有通用的“后台运行”工具。有多种专用工具可用于解决特定问题,您需要使用与您的用例相匹配的工具。 iOS 中的后台操作很复杂,您需要阅读所使用的每个工具的文档,了解如何配置它以及它允许做什么和不允许做什么。
关于ios - 在后台运行应用程序并播放一些音频和加速度计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67162986/