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

时间:2015-06-03 11:58:58

标签: ios objective-c mpmusicplayercontroller

我的申请中有以下情况:

我的应用程序中有一个音乐系统,我使用MPMusicPlayerController播放音乐;到目前为止,每件事情都很好。

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

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

我有一些代码试图在applicationWillTerminate:中阻止它,但它只适用于某些情况:

  
      
  1. 如果我按两次主页按钮并从多任务UI终止应用程序,则应用程序可以停止播放音乐播放器。

  2.   
  3. 如果我按一下主页按钮然后转到主屏幕,之后按两次主页按钮终止应用程序,然后它就无法停止我的音乐播放器。

  4.   

我试图在applicationWillTerminate:中设置一个断点但是在第二个例子中(从上面开始),应用程序崩溃并且没有执行我的代码,这与第一种情况不同。

UPDAT

我知道当我使用MPMusicPlayerController背景模式时,不需要它,因为它会在原生音乐播放器中启动音乐。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

不幸的是,根据您的要求,您唯一的选择是使用您自己的应用程序播放音频,例如AVAudioPlayer,并设置音频背景模式要求。

由于当您的应用程序被操作系统或用户终止时无法接收通知,您无法绕过它,您将无法从您的进程中停止系统或应用程序播放器。

注册NSUncaughtExceptionHandler不会捕获SIGKILL或SIGSTOP,因此您无法依赖系统音乐播放器。

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

答案 1 :(得分:0)

在这种情况下:

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

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

fileprivate var backgroundTask: UIBackgroundTaskIdentifier = .invalid

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

在AppDelegate中调用

希望能为您提供帮助