当用户终止应用程序时如何停止 MPMusicPlayerController 播放?

How to stop MPMusicPlayerController from playing when application terminate by user?

我在申请中遇到以下情况:

我的应用程序中有一个音乐系统,我用 MPMusicPlayerController 来播放音乐;到目前为止一切正常。

我的问题: 当用户开始在我的应用程序中播放音乐并在一段时间后终止时,音乐无法停止,因为我正在使用 [MPMusicPlayerController systemMusicPlayer] 对象.我知道还有一个选项是applicationMusicPlayer,但是它停止在后台播放音乐,这不符合我的要求。

如何在用户终止应用程序时停止播放音乐?

我有一些代码试图在 applicationWillTerminate: 中停止它,但它只在某些情况下有效:

  1. If I press home button twice and terminate the app from the multitasking UI, then the app can stop the music player.

  2. 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,因此您不能依赖系统音乐播放器。

这应该不是问题,因为在您的应用中设置音频播放很容易。如果您使用系统播放器以便用户可以播放自己的音乐,您应该使用选择器并访问他们的音乐库以便他们可以选择音乐。

在这种情况下:

  1. 如果我按一次主页按钮然后转到主屏幕,然后我按两次主页按钮并终止应用程序,那么它无法停止我的音乐播放器。

您必须在后台模式下注册应用程序。

fileprivate var backgroundTask: UIBackgroundTaskIdentifier = .invalid

func registerBackgroundTask() {
    self.backgroundTask = UIApplication.shared.beginBackgroundTask {
        //TODO
    }
}

在AppDelegate中调用

希望能帮到你