Nouveau dans le développement iOS, alors allez-y. J'ai une application qui lit de l'audio. J'utilise AVAudioPlayer
pour charger des fichiers uniques par leur nom dans les éléments de l'application. Je ne veux pas interroger la bibliothèque de l'utilisateur, mais uniquement les fichiers fournis. Fonctionne très bien, mais je veux que l'utilisateur puisse faire une pause et régler le volume à partir de l'écran de verrouillage.
func initAudioPlayer(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{}
}
Mon utilisation de AVAudioSession
et MPNowPlayingInfoCenter
n’était que des expériences tirées de la lecture d’autres publications.
Le mode d'arrière-plan est activé pour l'audio dans le fichier Plist de mon application
Vous devez appeler beginReceivingRemoteControlEvents () sinon cela ne fonctionnera pas sur le périphérique réel.
Swift 3.1
UIApplication.shared.beginReceivingRemoteControlEvents()
Si vous souhaitez spécifier des actions personnalisées pour MPRemoteCommandCenter:
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.addTarget(self, action:#selector(nextTrackCommandSelector))
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{}
}
Il y a déjà des commandes audio sur l'écran de verrouillage (l'interface "télécommande"). Si vous souhaitez qu'ils contrôlent le son de votre application, vous devez définir votre application comme cible de contrôle à distance, comme indiqué dans Documentation d'Apple .
J'ai ce problème. Vous avez seulement besoin
audioSession.setCategory(.playback, mode: .default) or
audioSession.setCategory(.playback, mode: .default, options:
.init(rawValue: 0))