2015-02-13 21 views
7

Sto creando un'applicazione abbastanza semplice e ho esplorato l'utilizzo di AVAudioPlayer per riprodurre suoni nella mia app, ma sto riscontrando un problema in cui viene riprodotto suono anche quando il dispositivo è in modalità silenziosa. Questo è il codice che sto usando:Swift - AVAudioPlayer riproduce ancora il suono quando il dispositivo è in modalità silenziosa?

var audioPlayer = AVAudioPlayer() 

Poi in Vista è stato caricato:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil) 
AVAudioSession.sharedInstance().setActive(true, error: nil) 
var error:NSError? 
var beepOne = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("menu", ofType: "wav")!) 
audioPlayer = AVAudioPlayer(contentsOfURL: beepOne, error: &error) 
audioPlayer.prepareToPlay() 

E quando il suono viene riprodotto:

audioPlayer.play() 

Cosa devo fare per fermare l'audio viene riprodotto quando il dispositivo è su Silent o passa al silenzio? Forse prima di audioPlayer.play() un'istruzione if che rileva se il dispositivo è in modalità silenziosa o no?

risposta

16

Trovato che cosa era sbagliato, nella seconda e terza riga di codice:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil) 
AVAudioSession.sharedInstance().setActive(true, error: nil) 

ho dovuto cambiare AVAudioSessionCategoryPlayback-AVAudioSessionCategoryAmbient

Spero che questo aiuti altri che potrebbero essere avendo lo stesso problema :)

+0

Grazie lukemartin31 –

+0

grazie amico! Mi ha davvero aiutato –

+0

Funziona ancora per iOS 10? Non ha funzionato per me. – user3427013

0

Vorrei aggiungere una soluzione utilizzando swift 2.0 che richiede la gestione degli errori try/catch. C'è un grande articolo su questo here.

let audioSession = AVAudioSession.sharedInstance() 
    do { 
     try audioSession.setCategory(AVAudioSessionCategoryAmbient, withOptions: .DuckOthers) 
    } catch { 
     print("AVAudioSession cannot be set") 
    }  

Questo post era per silenziare la riproduzione audio se il telefono è disattivato. Volevo fare il contrario e, in effetti, se sostituisci AVAudioSessionCategoryAmbient con AVAudioSessionCategoryPlayback, l'audio verrà riprodotto anche se il telefono è disattivato.