MPRemoteCommandCenter不生成远程控制事件MPMusicPlayerController.applicationMusicPlayer()

时间:2017-07-17 20:22:30

标签: ios iphone audio avaudiosession mpmusicplayercontroller

我在iPhone上使用MPRemoteCommandCenter和MPMusicPlayerController.applicationMusicPlayer。

我正在尝试在用户播放音乐和双击耳机按钮时接收遥控事件。

如果我使用AVAudioPlayer,则可以完美地接收远程命令。

但是,如果我将MPMusicPlayerController与其任何播放器(systemMusicPlayer,applicationMusicPlayer或applicationQueuePlayer)一起使用,则不会收到命令。他们似乎被吞噬了。例如,当我双击遥控器时,音乐将在播放和停止之间切换。相反,我需要发送到我的应用程序的远程事件。

以下是我的代码示例应用。在info.plist中,我为播放音频的应用指定了所需的背景模式(尽管不是必需的)。

import UIKit
import MediaPlayer

class ViewController: UIViewController {
    var mpPlayer:MPMusicPlayerController!

    func remoteHandler() {
        print("success")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        mpPlayer = MPMusicPlayerController.applicationMusicPlayer()
        //mpPlayer = MPMusicPlayerController.systemMusicPlayer()
        assert(mpPlayer != nil)

        let cc = MPRemoteCommandCenter.shared()
        print("cc = \(cc)")

        cc.nextTrackCommand.isEnabled = true
        cc.nextTrackCommand.addTarget(self, action: #selector(ViewController.remoteHandler))
        cc.previousTrackCommand.isEnabled = true
        cc.previousTrackCommand.addTarget(self, action: #selector(ViewController.remoteHandler))
        cc.playCommand.isEnabled = true
        cc.playCommand.addTarget(self, action: #selector(ViewController.remoteHandler))

        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            print("AVAudioSession successfully set AVAudioSessionCategoryPlayback")
        } catch let error as NSError {
            print("AVAudioSession setCategory error: \(error.localizedDescription)")
        }
        mpPlayer.setQueueWithStoreIDs(["270139033"]) // requires iOS 10.3
        mpPlayer.play()

    }
}

输出是:

cc = 0x123e086c0

AVAudioSession successfully set AVAudioSessionCategoryPlayback

remoteHandler is never called.

1 个答案:

答案 0 :(得分:0)

来自Apple Developer web site

  

使用系统或应用程序播放器时,不会出现   事件通知。这些玩家会自动处理事件。

因此,如果您使用MPMusicPlayerController,则无法接收远程控制事件。期待看到此功能!目前,MPMusicPlayerController是播放Apple Music歌曲的唯一方法。