2016-11-15 48 views
0

我正在创建一个使用MPMediaItems和MPMediaPlayerController的音乐播放器(在Swift 3中)。我不能为我的生活弄清楚如何从锁定屏幕或通知中心控制音乐...iOS Swift - MPCommandCenter&NowPlayingInfoCenter控制音乐锁屏

我已阅读每篇文章,我可以找到关于MPRemoteCommandCenter和MPNowPlayingInfoCenter,我无法得到它的工作。

我已启用背景音乐播放功能,目前音乐仍在应用程序之外播放,但未收到远程命令。

下面是目前正在使用

在我看来代码没有加载我调用下面的函数

let player = MPMusicPlayerController.applicationMusicPlayer() 
let commandCenter = MPRemoteCommandCenter.shared() 

func configureCommandCenter() { 
    print("Enter configuration") 
    self.commandCenter.playCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("Play") 
     sself.player.play() 
     self?.getNowPlayingItem() 
     return .success 
    } 

    self.commandCenter.pauseCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("Pause") 
     sself.player.pause() 
     self?.getNowPlayingItem() 
     return .success 
    } 

    self.commandCenter.nextTrackCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("next") 
     sself.player.skipToNextItem() 
     self?.getNowPlayingItem() 
     return .success 
    } 

    self.commandCenter.previousTrackCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("Prev") 
     sself.player.skipToPreviousItem() 
     self?.getNowPlayingItem() 
     return .success 
    } 

} 

要重申我的项目编译好,播放媒体,继续播放媒体时,应用不支持重点和手机被锁定时,但是在应用程序内没有看到任何命令,导致应用程序无法通过锁定屏幕或通知中心进行控制。任何帮助将不胜感激。

我还想提一下,我已经查看了与RemoteCommands和InfoCenter相关的Apple API文档。

我错过了一些关键步骤,以获得从应用程序内注册远程命令?

+0

不相关,但你应该删除你的'viewDidAppear'。这不相关。您将旧的MPRemoteCommandCenter方式与新的MPRemoteCommandCenter方式相结合。没有意义。 – matt

+0

这些是我目前使用角色扮演角色的两个相关功能......而且他们确实可以编译,你能详细说明为什么你认为他们不会?也许这就是为什么我没有收到命令的一部分? – Jerland2

+0

@matt,谢谢我将删除函数我不知道有一种新旧方式,这是我第一次使用这些库的经验 – Jerland2

回答

1

问题是您的播放器是MPMusicPlayerController.applicationMusicPlayer()。您无法将应用程序音乐播放器用作遥控目标。

如果你想要遥控目标功能,你需要你的播放器是AVAudioPlayer。

+0

这是一个工作项目,你可以下载并运行,如果你想实验:https://github.com/mattneub/Programming-iOS-Book-Examples/tree/61f0c753a080040e4a74b912e6c18dd97fe8bcaa/bk2ch14p644remote/ch27p912ducking – matt

+0

哦哇谢谢你,对不起关于JavaScript的不幸事件,它重新格式化了我的代码,它已被修复。我是否纠正了以下事实:在使用AVAudioPlayer时会导致获得远程控制目标功能的能力,然后妨碍使用Apple Music(DRM)音乐?我是在这个假设下,因为Apple Music用户库中的曲目没有URL,因此无法使用AVAudioPlayer播放? – Jerland2

+1

我相信你是对的,因为如果你能通过DRM通过你自己的声音处理器,你会窃取声音。如果您想要Apple Music和遥控器,那么我可以使用'systemMusicPlayer'(也称为音乐应用程序)。 - 但是,请注意,Apple Music对您的原始问题没有任何关注。这确实构成了一个全新的问题(并可以自由地将其作为一个新问题)。 – matt