Swift-音频后台播放设置及锁屏界面的显示与控制

Swift-音频后台播放设置及锁屏界面的显示与控制

项目需求: 退出App后音乐继续播放并且可以操控
项目实现:

1.首先选中项目,点击target,按+Capabilities中进行设置,开启background modes(后台模式),勾上Audio,AirPlay,and picture in pucture
在这里插入图片描述
2.在Appdelegate里添加头文件,注册后台播放方法
在这里插入图片描述

import AVFoundation

 // 注册后台播放
        let session = AVAudioSession.sharedInstance()
        do {
    
    
            try session.setActive(true)
            try session.setCategory(AVAudioSession.Category.playback)
        } catch {
    
    
            print(error)
        }
	UIApplication.shared.beginReceivingRemoteControlEvents()

3.在要使用的ViewController里添加方法:
viewWillAppear中打开接受远程控制事件
viewWillDisappear中关闭远程控制事件

override func viewWillAppear(_ animated: Bool) {
    
    
    super.viewWillAppear(animated)
    becomeFirstResponder()
    UIApplication.shared.beginReceivingRemoteControlEvents()
}
override func viewWillDisappear(_ animated: Bool) {
    
    
    super.viewWillDisappear(animated)
    resignFirstResponder()
    UIApplication.shared.endReceivingRemoteControlEvents()
}

4.在要使用的ViewController里添加锁屏信息方法:

//    MARK: 设置锁屏信息显示
func setLockScreenDisplay() {
    
    
    var info = Dictionary<String, Any>()
    info[MPMediaItemPropertyTitle] = model.name//歌名
    info[MPMediaItemPropertyArtist] = model.singer//作者
   //        [info setObject:self.model.filename forKey:MPMediaItemPropertyAlbumTitle];//专辑名
    info[MPMediaItemPropertyAlbumArtist] = model.singer//专辑作者
    info[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(image: UIImage.init(named: model.icon)!)//显示的图片
    info[MPMediaItemPropertyPlaybackDuration] = audioPlayer.duration//总时长
    info[MPNowPlayingInfoPropertyPlaybackRate] = 1.0//播放速率
    MPNowPlayingInfoCenter.default().nowPlayingInfo = info
}

5.在要使用的ViewController里添加锁屏控制方法:
在代码段中case .remoteControlPlay: (写要进行的操作)break,
如果()内不写,直接break,则点击的时候不会有反应

//    MARK: 锁屏控制
override func remoteControlReceived(with event: UIEvent?) {
    
    
    let type = event?.subtype
    switch type! {
    
    
    case .remoteControlPlay: break
        //播放
    case .remoteControlPause: break
        //暂停
    case .remoteControlStop: break
    //停止
    case .remoteControlTogglePlayPause: break
    //切换播放暂停(耳机线控)
    case .remoteControlNextTrack: break
        //下一首
    case .remoteControlPreviousTrack: break
        //上一首
    case .remoteControlBeginSeekingBackward: break
    //开始快退
    case .remoteControlEndSeekingBackward: break
    //结束快退
    case .remoteControlBeginSeekingForward: break
    //开始快进
    case .remoteControlEndSeekingForward: break
    //结束快进
    default:
        break
    }
}

我这边是只用到暂停、继续播放、下一首、上一首

在viewcontroller里let 一个player:
 //音频播放器
    let player = AudioPlayer()

暂停:

case .remoteControlPause: self.player.pause()
            break

播放:

case .remoteControlPlay: self.player.resume()
            break

在上一首和下一首的时候,用到了当前选中的index,所以new了一个currentRow,然后在进行上一首下一首的时候先进行设置当前播放行:

 var currentRow: Int? = 0

func setCurrentRow(type: Int){
        let current = self.currentRow ?? 0
        switch type {
        case 0:
            if current < noiseData.count - 1 {
                currentRow = current + 1
            } else {
                currentRow = 0
            }
        case 1:
            if current < 1 {
                currentRow = noiseData.count - 1
            } else {
                currentRow = current - 1
            }
        default:
            break
        }
    }
    
//这里是最初选择音乐的时候选中的行通过代理传递过来
 func homeNoiseTapCollection(index: Int, value: String) {
        player.playMusic(name: value, volume: noiseStyle.volume)
        //保存选择的白噪音
        self.currentRow = index
        homeSelectSection.reloadData(type: 0)
    }

下一首:

case .remoteControlNextTrack:
            setCurrentRow(type: 0)
            self.player.playMusic(name: self.noiseData[self.currentRow ?? 0], volume: self.noiseStyle.volume)
            break

上一首:

case .remoteControlPreviousTrack:
            setCurrentRow(type: 1)
            self.player.playMusic(name: self.noiseData[self.currentRow ?? 0], volume: self.noiseStyle.volume)

简单五步搞定音乐播放器的锁屏,重要的是swift实现哦,赶紧来试试吧,看看效果会心动吗?

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36411120/article/details/115104838