2014年7月24日

AVAudioPlayer 在靜音模式時關閉音效


使用過 apple 手持裝置的人應該都知道,apple 無論是 pad 或是 iphone 甚至 touch,都會有一個 " 響鈴 / 靜音 " 的切換鍵 ( switch )。當您不希望被任何聲音干擾時,可將它切換成靜音模式,這樣任何 app 就不應該在發出聲音。

使用 AVAudioPlayer 播放聲音,將手機 " 響鈴 / 靜音 " 按鍵切換至 " 靜音 " 卻還有聲音

  1. 問題:當 我們在 app 中使用 AVAudioPlayer 播放聲音時,一般來說會設定 AudioSession 為AVAudioSessionCategoryPlayback。這時若將手機上的 " 響鈴 / 靜音 " 切換到靜音時,AVAudioPlayer 依然能播放聲音,並沒有達到預期 " 靜音 " 的效果。
    從 apple 官方文件可看出,若設置 AudioSession 為 AVAudioSessionCategoryPlayback 時,無論您的手機是否切換靜音模式,或者 app 是否退到背景,都會繼續撥放音效!
  2. 解決辦法:將 AudioSession 改為 AVAudioSessionCategoryAmbient
    ※ 注意,若設定為 AVAudioSessionCategoryAmbient,則 app 一退到背景,無論是否切換靜音模式 app 都無法播放聲音!但這不會影響其他 app 音效(其他 app 音效不會停止)
  3. 實作方式:(在播放音效前呼叫)

- (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]);
    }
}

References