当用户终止应用程序时如何停止 MPMusicPlayerController 播放?
How to stop MPMusicPlayerController from playing when application terminate by user?
我在申请中遇到以下情况:
我的应用程序中有一个音乐系统,我用 MPMusicPlayerController
来播放音乐;到目前为止一切正常。
我的问题: 当用户开始在我的应用程序中播放音乐并在一段时间后终止时,音乐无法停止,因为我正在使用 [MPMusicPlayerController systemMusicPlayer]
对象.我知道还有一个选项是applicationMusicPlayer
,但是它停止在后台播放音乐,这不符合我的要求。
如何在用户终止应用程序时停止播放音乐?
我有一些代码试图在 applicationWillTerminate:
中停止它,但它只在某些情况下有效:
If I press home button twice and terminate the app from the multitasking UI, then the app can stop the music player.
If I press the home button once and then go to the home screen, and after that I press the home button twice and terminate the application then it can not stop my music player.
我试图在 applicationWillTerminate:
中放置一个断点,但在第二个示例(从上面)中,应用程序崩溃并且没有执行我的代码,这与第一种情况不同。
更新
而且我知道当我使用 MPMusicPlayerController
背景模式时不需要,因为它会在本机音乐播放器中启动音乐。
如有任何帮助,我们将不胜感激。
不幸的是,根据您的要求,您唯一的选择是使用您自己的应用程序播放音频,例如 AVAudioPlayer 并设置音频背景模式要求。
由于当您的应用程序被 OS 或用户终止时无法收到通知,您没有办法解决它,您将无法停止系统或应用程序播放器从你的过程。
注册 NSUncaughtExceptionHandler
也不会捕获 SIGKILL 或 SIGSTOP,因此您不能依赖系统音乐播放器。
这应该不是问题,因为在您的应用中设置音频播放很容易。如果您使用系统播放器以便用户可以播放自己的音乐,您应该使用选择器并访问他们的音乐库以便他们可以选择音乐。
在这种情况下:
- 如果我按一次主页按钮然后转到主屏幕,然后我按两次主页按钮并终止应用程序,那么它无法停止我的音乐播放器。
您必须在后台模式下注册应用程序。
fileprivate var backgroundTask: UIBackgroundTaskIdentifier = .invalid
func registerBackgroundTask() {
self.backgroundTask = UIApplication.shared.beginBackgroundTask {
//TODO
}
}
在AppDelegate中调用
希望能帮到你
我在申请中遇到以下情况:
我的应用程序中有一个音乐系统,我用 MPMusicPlayerController
来播放音乐;到目前为止一切正常。
我的问题: 当用户开始在我的应用程序中播放音乐并在一段时间后终止时,音乐无法停止,因为我正在使用 [MPMusicPlayerController systemMusicPlayer]
对象.我知道还有一个选项是applicationMusicPlayer
,但是它停止在后台播放音乐,这不符合我的要求。
如何在用户终止应用程序时停止播放音乐?
我有一些代码试图在 applicationWillTerminate:
中停止它,但它只在某些情况下有效:
If I press home button twice and terminate the app from the multitasking UI, then the app can stop the music player.
If I press the home button once and then go to the home screen, and after that I press the home button twice and terminate the application then it can not stop my music player.
我试图在 applicationWillTerminate:
中放置一个断点,但在第二个示例(从上面)中,应用程序崩溃并且没有执行我的代码,这与第一种情况不同。
更新
而且我知道当我使用 MPMusicPlayerController
背景模式时不需要,因为它会在本机音乐播放器中启动音乐。
如有任何帮助,我们将不胜感激。
不幸的是,根据您的要求,您唯一的选择是使用您自己的应用程序播放音频,例如 AVAudioPlayer 并设置音频背景模式要求。
由于当您的应用程序被 OS 或用户终止时无法收到通知,您没有办法解决它,您将无法停止系统或应用程序播放器从你的过程。
注册 NSUncaughtExceptionHandler
也不会捕获 SIGKILL 或 SIGSTOP,因此您不能依赖系统音乐播放器。
这应该不是问题,因为在您的应用中设置音频播放很容易。如果您使用系统播放器以便用户可以播放自己的音乐,您应该使用选择器并访问他们的音乐库以便他们可以选择音乐。
在这种情况下:
- 如果我按一次主页按钮然后转到主屏幕,然后我按两次主页按钮并终止应用程序,那么它无法停止我的音乐播放器。
您必须在后台模式下注册应用程序。
fileprivate var backgroundTask: UIBackgroundTaskIdentifier = .invalid
func registerBackgroundTask() {
self.backgroundTask = UIApplication.shared.beginBackgroundTask {
//TODO
}
}
在AppDelegate中调用
希望能帮到你