2015-02-13 9 views
7

Tworzę dość prostą aplikację i odkrywam używanie AVAudioPlayer do odtwarzania dźwięku w mojej aplikacji, ale mam problem z odtwarzaniem dźwięku nawet wtedy, gdy urządzenie jest wyłączone. Jest to kod używam:Swift - AVAudioPlayer nadal odtwarza dźwięk, gdy urządzenie jest wyłączone?

var audioPlayer = AVAudioPlayer() 

Następnie w widoku zrobił obciążenie:

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() 

A gdy dźwięk jest odtwarzany:

audioPlayer.play() 

Co muszę zrobić, aby zatrzymać dźwięk z gry, gdy urządzenie jest włączone lub cicho? Być może przed audioPlayer.play() instrukcja if, która wykrywa, czy urządzenie jest w ciszy, czy nie?

Odpowiedz

16

Znaleziony co było nie tak, w drugiej i trzeciej linii kodu:

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

musiałem zmienić AVAudioSessionCategoryPlayback do AVAudioSessionCategoryAmbient

Nadzieja to pomaga innym, którzy mogliby być ten sam problem :)

+0

Dzięki lukemartin31 –

+0

dzięki mate! Naprawdę pomógł mi –

+0

Czy to nadal działa na iOS 10? To nie działa dla mnie. – user3427013

0

Chciałbym dodać rozwiązanie przy użyciu metody swift 2.0, która wymaga obsługi błędów prób/błędów. Na ten artykuł jest świetny artykuł here.

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

Ten wpis służy do wyciszenia odtwarzania dźwięku, jeśli telefon jest wyciszony. Chciałem zrobić coś odwrotnego, a nawet jeśli zastąpisz AVAudioSessionCategoryAmbient powyżej AVAudioSessionCategoryPlayback, dźwięk będzie odtwarzany, nawet jeśli telefon jest wyciszony.

Powiązane problemy