MPMediaPickerDelegate
Remarks#
Please see the Apple Documentation for more information regarding privacy.
Make sure the Music app is available in your iPhone. It will not work in the simulator.
Load music with MPMediaPickerControllerDelegate and play it with AVAudioPlayer
Go through the steps:
- Add ‘NSAppleMusicUsageDescription’ to your Info.plist for the privacy authority.
- Make sure your music is available in your iPhone. It will not work in the simulator.
import UIKit
import AVFoundation
import MediaPlayer
class ViewController: UIViewController, MPMediaPickerControllerDelegate {
var avMusicPlayer: AVAudioPlayer!
var mpMediapicker: MPMediaPickerController!
var mediaItems = [MPMediaItem]()
let currentIndex = 0
override func viewDidLoad() {
super.viewDidLoad()
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool){
//What to do?
}
func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
mediaItems = mediaItemCollection.items
updatePlayer()
self.dismiss(animated: true, completion: nil)
}
func updatePlayer(){
let item = mediaItems[currentIndex]
// DO-TRY-CATCH try to setup AVAudioPlayer with the path, if successful, sets up the AVMusicPlayer, and song values.
if let path: NSURL = item.assetURL as NSURL? {
do
{
avMusicPlayer = try AVAudioPlayer(contentsOf: path as URL)
avMusicPlayer.enableRate = true
avMusicPlayer.rate = 1.0
avMusicPlayer.numberOfLoops = 0
avMusicPlayer.currentTime = 0
}
catch
{
avMusicPlayer = nil
}
}
}
@IBAction func Play(_ sender: AnyObject) {
//AVMusicPlayer.deviceCurrentTime
avMusicPlayer.play()
}
@IBAction func Stop(_ sender: AnyObject) {
avMusicPlayer.stop()
}
@IBAction func picker(_ sender: AnyObject) {
mpMediapicker = MPMediaPickerController.self(mediaTypes:MPMediaType.music)
mpMediapicker.allowsPickingMultipleItems = false
mpMediapicker.delegate = self
self.present(mpMediapicker, animated: true, completion: nil)
}
}