从通知控制中心同时播放多个音频

Posted

技术标签:

【中文标题】从通知控制中心同时播放多个音频【英文标题】:Multiple audios are playing simultaneously from notification control center 【发布时间】:2018-06-01 06:35:06 【问题描述】:

我有一个场景,当我播放单个音频文件并移动到控制中心时它工作正常,但如果返回视图控制器(那里调用 player.pause())并返回并尝试其他文件它工作在同一个控制器上,但在控制中心上一个文件也同时播放。

可能是因为 AVPlayer 对象,我的处理程序被调用了多次。

MPRemoteCommandCenter.shared().playCommand.addTarget  (playEvent) -> MPRemoteCommandHandlerStatus in
        let currentItem = self.player.currentItem
        self.player.replaceCurrentItem(with: currentItem)
        if self.player.isPlaying 
            self.player.pause()
        else
            self.player.play()
        
        self.updateInfo()
        self.btnAudioPlay.setImage(#imageLiteral(resourceName: "pause"), for: .normal)
        return .success
    

MPRemoteCommandCenter.shared().pauseCommand.addTarget  (pauseEvent) -> MPRemoteCommandHandlerStatus in
        if self.player.isPlaying 
            self.player.pause()
        else
            self.player.play()
        
        self.updateInfo()
        self.btnAudioPlay.setImage(#imageLiteral(resourceName: "play"), for: .normal)
        return .success
    

func updateInfo() 
    let image = UIApplication.shared.icon!
    let mediaArtwork = MPMediaItemArtwork(boundsSize: image.size)  (size: CGSize) -> UIImage in
        return image
    

    let nowPlayingInfo: [String: Any] = [
        MPMediaItemPropertyAlbumTitle: self.subTilteForAudioPlayer,
        MPMediaItemPropertyTitle: self.titleForAudioPlayer,
        MPMediaItemPropertyArtwork: mediaArtwork,
        MPMediaItemPropertyPlaybackDuration:  Float(CMTimeGetSeconds((player.currentItem?.asset.duration)!)) ,
        MPNowPlayingInfoPropertyElapsedPlaybackTime: Float(CMTimeGetSeconds(player.currentTime()))
    ]
    MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo

【问题讨论】:

【参考方案1】:

音频播放器每次都会被初始化,它出现在同一个屏幕上,因此多个声音通过通知中心播放。

player = nil

上面的代码对我有用。

【讨论】:

以上是关于从通知控制中心同时播放多个音频的主要内容,如果未能解决你的问题,请参考以下文章

播放音频时设置自定义元数据(控制中心、锁屏...)

在swift中无法控制来自控制中心的音频

手机不能下滑控制面板

Firebase 通知仅显示在控制中心

关闭通知、通知中心和控制中心

关闭通知,通知中心和控制中心