我在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.
答案 0 :(得分:0)
来自Apple Developer web site。
使用系统或应用程序播放器时,不会出现 事件通知。这些玩家会自动处理事件。
因此,如果您使用MPMusicPlayerController,则无法接收远程控制事件。期待看到此功能!目前,MPMusicPlayerController是播放Apple Music歌曲的唯一方法。