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


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 {              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){                let mpic = MPNowPlayingInfoCenter.defaultCenter()//                mpic.nowPlayingInfo = [MPMediaItemPropertyTitle:"title", MPMediaItemPropertyArtist:"artist"]        }    }    catch{}}