【问题标题】:How to stop MPMusicPlayerController from playing when application terminate by user?当应用程序被用户终止时,如何阻止 MPMusicPlayerController 播放?
【发布时间】:2019-02-14 12:20:08
【问题描述】:

我的申请中有以下情况:

我的应用程序中有一个音乐系统,我使用MPMusicPlayerController 播放音乐;到目前为止,一切都运行良好。

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

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

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

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

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

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

更新文件

而且我知道当我使用MPMusicPlayerController 时不需要后台模式,因为它会在本地音乐播放器中启动音乐。

任何帮助将不胜感激。

【问题讨论】:

  • 您尝试将audio 添加到UIBackgroundModes 吗?
  • @Sega-Zero 通过 MPMusicPlayerController 播放音乐时不需要背景模式
  • @chiragshah 我遇到了完全相同的问题 - 你是如何解决这个问题的? stackoverflow.com/questions/42331852/…

标签: ios objective-c mpmusicplayercontroller


【解决方案1】:

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

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

注册NSUncaughtExceptionHandler 也不会收到 SIGKILL 或 SIGSTOP,因此您不能依赖系统音乐播放器。

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

【讨论】:

  • 如果你有任何演示,因为我不知道如何在 AVAudioPlayer 中播放歌曲
  • 当然,我会更新我的答案。首先请说明您要播放什么,音频来自哪里等?例如,如果用户从他们的音乐库中选择了一首歌曲,或者如果您向用户提供他们可以选择播放的歌曲列表,这些歌曲是否在服务器上等等?
  • 用户只能选择音乐播放器中的歌曲
  • 好的,这些应该可以帮助您前进。 stackoverflow.com/questions/3191580/…, code.tutsplus.com/tutorials/…
【解决方案2】:

在这种情况下:

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

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

fileprivate var backgroundTask: UIBackgroundTaskIdentifier = .invalid

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

在 AppDelegate 中调用

希望能帮到你

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多