即使在iPhone的靜音模式下,我也想播放聲音。如何在iPhone的靜音模式下使用AVAudioPlayer播放聲音
它可以通過提前使用AVAudioPlayer(不使用AVAudioSession)
(適用於iOS 3.0+)
感謝來完成。
即使在iPhone的靜音模式下,我也想播放聲音。如何在iPhone的靜音模式下使用AVAudioPlayer播放聲音
它可以通過提前使用AVAudioPlayer(不使用AVAudioSession)
(適用於iOS 3.0+)
感謝來完成。
其實,你可以做到這一點。它通過音頻會話進行控制,與AVAudioPlayer
本身無關。你爲什麼不想使用AudioSession?他們在一起玩得很好...
在你的應用程序中,你應該初始化音頻會話,然後你也可以告訴表明你打算播放什麼樣的音頻。如果您是音樂播放器,那麼即使啓用了振鈴/靜音開關,用戶也希望聽到音頻。
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);
我有一個應用程序,我做的這事,並使用AVAudioPlayer播放音頻,並啓用了環/靜音開關,我可以聽到聲音。
UPDATE(2013年11月6日)
在我上面提到的,其中I以上成功地使用的代碼,我有(一段時間)被用下面的代碼代替來達到同樣的應用結果:
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 }
我想我會張貼此作爲替代,根據最新評論這個答案。 :-)
感謝你的迴應,它工作得很好:) – Nima 2012-04-26 20:02:06
很高興聽到它。 :-) – 2012-04-26 20:07:02
我曾經使用這種方法,但現在一天它似乎不再工作。有沒有其他人注意到這一點? – 2013-11-06 01:27:27
MarkGranoff's solution是正確的。但是,如果您更喜歡在Obj-c而不是C中執行此操作,則以下方法也適用:
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];
上述答案是正確的。以下是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)
}
這將只是做的伎倆(使用AVAudioSession
)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
如果設備是靜音模式,不播放聲音。用戶明確要求保持沉默! – 2012-04-25 19:15:34
爲什麼沒有AVAudioSession? – 2012-04-25 19:44:07
@JonathanGrynspan - 當用戶_remembers_他們請求沉默時有意義,但如果您製作AV性質的應用程序,您將被這種評論淹沒:「音頻不工作★☆☆☆☆」 – 2012-10-10 15:34:14