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{}}