我的申请中有以下情况:
我的应用程序中有一个音乐系统,我使用MPMusicPlayerController
播放音乐;到目前为止,每件事情都很好。
我的问题:当用户在我的应用程序中开始播放音乐时,经过一段时间终止后,音乐无法停止,因为我正在使用[MPMusicPlayerController systemMusicPlayer]
对象。我知道还有另一个选项是applicationMusicPlayer
,但它停止在后台播放音乐,但这并不能满足我的要求。
当用户终止应用程序时,如何停止播放音乐?
我有一些代码试图在applicationWillTerminate:
中阻止它,但它只适用于某些情况:
如果我按两次主页按钮并从多任务UI终止应用程序,则应用程序可以停止播放音乐播放器。
- 醇>
如果我按一下主页按钮然后转到主屏幕,之后按两次主页按钮终止应用程序,然后它就无法停止我的音乐播放器。
我试图在applicationWillTerminate:
中设置一个断点但是在第二个例子中(从上面开始),应用程序崩溃并且没有执行我的代码,这与第一种情况不同。
UPDAT
我知道当我使用MPMusicPlayerController
背景模式时,不需要它,因为它会在原生音乐播放器中启动音乐。
任何帮助都将不胜感激。
答案 0 :(得分:3)
不幸的是,根据您的要求,您唯一的选择是使用您自己的应用程序播放音频,例如AVAudioPlayer,并设置音频背景模式要求。
由于当您的应用程序被操作系统或用户终止时无法接收通知,您无法绕过它,您将无法从您的进程中停止系统或应用程序播放器。
注册NSUncaughtExceptionHandler
不会捕获SIGKILL或SIGSTOP,因此您无法依赖系统音乐播放器。
这不应该是一个问题,因为它很容易在您的应用程序中设置音频播放。如果您正在使用系统播放器以便用户可以播放自己的音乐,则应使用选择器并访问其音乐库,以便他们可以选择音乐。
答案 1 :(得分:0)
在这种情况下:
您必须在后台模式下注册应用程序。
fileprivate var backgroundTask: UIBackgroundTaskIdentifier = .invalid
func registerBackgroundTask() {
self.backgroundTask = UIApplication.shared.beginBackgroundTask {
//TODO
}
}
在AppDelegate中调用
希望能为您提供帮助