How Do I Get Audio Controls on Lock Screen/Control Center from AVAudioPlayer in Swift How Do I Get Audio Controls on Lock Screen/Control Center from AVAudioPlayer in Swift ios ios

How Do I Get Audio Controls on Lock Screen/Control Center from AVAudioPlayer in Swift


You need to invoke beginReceivingRemoteControlEvents() otherwise it will not work on the actual device.

Swift 3.1

UIApplication.shared.beginReceivingRemoteControlEvents()

If you would like to specify custom actions for the MPRemoteCommandCenter:

let commandCenter = MPRemoteCommandCenter.shared()commandCenter.nextTrackCommand.isEnabled = truecommandCenter.nextTrackCommand.addTarget(self, action:#selector(nextTrackCommandSelector))


To implement this functionality, use the Media Player framework’s MPRemoteCommandCenter and MPNowPlayingInfoCenter classes with AVPlayer.

import MediaPlayerimport AVFoundation// Configure AVPlayervar player = AVPlayer()

Configure the Remote Command Handlers

Defines a variety of commands in the form of MPRemoteCommand objects to which you can attach custom event handlers to control playback in your app.

    func setupRemoteTransportControls() {    // Get the shared MPRemoteCommandCenter    let commandCenter = MPRemoteCommandCenter.shared()    // Add handler for Play Command    commandCenter.playCommand.addTarget { [unowned self] event in        if self.player.rate == 0.0 {            self.player.play()            return .success        }        return .commandFailed    }    // Add handler for Pause Command    commandCenter.pauseCommand.addTarget { [unowned self] event in        if self.player.rate == 1.0 {            self.player.pause()            return .success        }        return .commandFailed    }}

Provide Display Metadata

Provide a dictionary of metadata using the keys defined by MPMediaItem and MPNowPlayingInfoCenter and set that dictionary on the default instance of MPNowPlayingInfoCenter.

func setupNowPlaying() {    // Define Now Playing Info    var nowPlayingInfo = [String : Any]()    nowPlayingInfo[MPMediaItemPropertyTitle] = "My Movie"    if let image = UIImage(named: "lockscreen") {        nowPlayingInfo[MPMediaItemPropertyArtwork] =            MPMediaItemArtwork(boundsSize: image.size) { size in                return image        }    }    nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = playerItem.currentTime().seconds    nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = playerItem.asset.duration.seconds    nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = player.rate    // Set the metadata    MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo}

For more information refer Apples official Documentation


func myplayer(file:String, type:String){let path = NSBundle.mainBundle().pathForResource(file, ofType: type)!let url = NSURL(fileURLWithPath: path)let audioShouldPlay = audioPlaying()do{    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)    try AVAudioSession.sharedInstance().setActive(true)    let audioPlayer:AVAudioPlayer = try AVAudioPlayer(contentsOfURL: url)    audioPlayer.volume = slider.value    audioPlayer.numberOfLoops = -1    audioPlayer.prepareToPlay()    if(audioShouldPlay){        audioPlayer.play()//                let mpic = MPNowPlayingInfoCenter.defaultCenter()//                mpic.nowPlayingInfo = [MPMediaItemPropertyTitle:"title", MPMediaItemPropertyArtist:"artist"]        }    }    catch{}}