Chcę odtwarzać dźwięk nawet w trybie cichym w telefonie iPhone.Jak odtwarzać dźwięk za pomocą AVAudioPlayer w trybie cichym w telefonie iPhone
Można to zrobić za pomocą AVAudioPlayer (bez użycia AVAudioSession)
(dla iOS 3.0+)
góry dziękuję.
Chcę odtwarzać dźwięk nawet w trybie cichym w telefonie iPhone.Jak odtwarzać dźwięk za pomocą AVAudioPlayer w trybie cichym w telefonie iPhone
Można to zrobić za pomocą AVAudioPlayer (bez użycia AVAudioSession)
(dla iOS 3.0+)
góry dziękuję.
Właściwie możesz to zrobić. Jest kontrolowany przez Audio Session i nie ma nic wspólnego z samym AVAudioPlayer
. Dlaczego nie chcesz korzystać z AudioSession? Grają sympatycznie razem ...
W swojej aplikacji powinieneś zainicjować Audio Session, a następnie możesz również wskazać rodzaj audio, który zamierzasz odtwarzać. Jeśli jesteś odtwarzaczem muzyki, to ma to sens, że użytkownik chciałby usłyszeć dźwięk nawet przy włączonym sygnale dzwonka/wyciszenia.
AudioSessionInitialize (NULL, NULL, NULL, NULL);
AudioSessionSetActive(true);
// Allow playback even if Ring/Silent switch is on mute
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
sizeof(sessionCategory),&sessionCategory);
Mam app, że robię to bardzo rzeczą, i używać AVAudioPlayer do odtwarzania dźwięku, a przy włączonym pierścień/silent switch, słyszę dźwięk.
UPDATE (11/6/2013)
W aplikacji wspomniano powyżej, gdzie stosuje się powyższy kod skutecznie mam (na jakiś czas) został z zastosowaniem kodu, a nie w celu osiągnięcia tego samego Wynik:
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *error = nil; BOOL result = NO; if ([audioSession respondsToSelector:@selector(setActive:withOptions:error:)]) { result = [audioSession setActive:YES withOptions:0 error:&error]; // iOS6+ } else { [audioSession setActive:YES withFlags:0 error:&error]; // iOS5 and below } if (!result && error) { // deal with the error } error = nil; result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error]; if (!result && error) { // deal with the error }
Pomyślałem, że zamieściłbym to jako alternatywę, w świetle ostatniego komentarza do tej odpowiedzi. :-)
Dzięki za Twoja odpowiedź, działało bardzo dobrze :) – Nima
Miło to słyszeć. :-) –
Użyłem tej metody, ale teraz wydaje mi się, że teraz nie działa. Czy ktoś inny to zauważył? –
MarkGranoff's solution jest poprawna. Jeśli jednak wolisz zrobić to w Obj-c zamiast C, działa również:
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];
Dzięki wL_.Preferuję kod Obj-C, aby to osiągnąć :) Działa idealnie – iOSAppDev
Usunięcie sprawdzania błędów w kodzie nie sprawia, że Obj-C, twoje ans jest takie samo jak oryginalne ans przez MarkGranoff – Thiru
@Thiru ta odpowiedź jest teraz nieistotna. Ale został opublikowany przed edycją Marka. –
Powyższe odpowiedzi są poprawne. Poniżej znajduje się wersja Swift.
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
//print("AVAudioSession Category Playback OK")
do {
try AVAudioSession.sharedInstance().setActive(true)
//print("AVAudioSession is Active")
} catch _ as NSError {
//print(error.localizedDescription)
}
} catch _ as NSError {
//print(error.localizedDescription)
}
To będzie po prostu rade (używając AVAudioSession
)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
Jeśli urządzenie jest w trybie cichym, nie odtwarza dźwięku. Użytkownik wyraźnie poprosił o ciszę! –
Dlaczego bez AVAudioSession? –
@JonathanGrynspan - ma to sens, gdy użytkownik _wyjaśnia_, że poprosił o ciszę, ale jeśli zrobisz aplikacje o charakterze AV, zostaniesz zalany taką opinią: "AUDIO NIE DZIAŁA ★ ☆☆☆☆" –