使用過 apple 手持裝置的人應該都知道,apple 無論是 pad 或是 iphone 甚至 touch,都會有一個 " 響鈴 / 靜音 " 的切換鍵 ( switch )。當您不希望被任何聲音干擾時,可將它切換成靜音模式,這樣任何 app 就不應該在發出聲音。
使用 AVAudioPlayer 播放聲音,將手機 " 響鈴 / 靜音 " 按鍵切換至 " 靜音 " 卻還有聲音
- 問題:當 我們在 app 中使用 AVAudioPlayer 播放聲音時,一般來說會設定
AudioSession
為AVAudioSessionCategoryPlayback
。這時若將手機上的 " 響鈴 / 靜音 " 切換到靜音時,AVAudioPlayer 依然能播放聲音,並沒有達到預期 " 靜音 " 的效果。
從 apple 官方文件可看出,若設置AudioSession
為AVAudioSessionCategoryPlayback
時,無論您的手機是否切換靜音模式,或者 app 是否退到背景,都會繼續撥放音效! - 解決辦法:將
AudioSession
改為AVAudioSessionCategoryAmbient
※ 注意,若設定為AVAudioSessionCategoryAmbient
,則 app 一退到背景,無論是否切換靜音模式 app 都無法播放聲音!但這不會影響其他 app 音效(其他 app 音效不會停止) - 實作方式:(在播放音效前呼叫)
- (void)useAmbient
{
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error;
//設定如果手機的響鈴/靜音switch切到靜音,或音量鍵切到靜音,則完全關閉app所有音效,app退背景也無法播放音效,但不會影響其他app音效(其他app音效不會停止)
[session setCategory:AVAudioSessionCategoryAmbient error:&error];
if(error!=nil){
NSLog(@"set AudioSession AVAudioSessionCategoryAmbient error: %@", [error localizedDescription]);
}
}
沒有留言:
張貼留言