Android音頻焦點

AudioManager mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

//獲得音頻焦點
//第三個參數durationHint:告知系統,你要求獲得音頻焦點的用途,系統根據你所要求的類型來給其他監聽者發出相應的焦點控制參數。
    //有三種可選
    //AUDIOFOCUS_GAIN_TRANSIENT:只是短暫獲得,一會就釋放焦點,比如你只是想發個notification時用下一秒不到的鈴聲。
    //AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:只是背景獲得,之前的音頻焦點使用者無需釋放焦點給我,我將與其共同使用。
    //AUDIOFOCUS_GAIN:我要求完全獲得焦點,其他人需要釋放焦點。比如我要播放音樂了,這時就要搶佔整個音頻焦點。
mAudioManager.requestAudioFocus(mAudioFocusListener,AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

    //focusChange主要有以下四種參數:
    //AUDIOFOCUS_AGIN:你已經完全獲得了音頻焦點
    //AUDIOFOCUS_LOSS:你會長時間的失去焦點,所以不要指望在短時間內能獲得。請結束自己的相關音頻工作並做好收尾工作。比如另外一個音樂播放器開始播放音樂了(前提是這個另外的音樂播放器他也實現了音頻焦點的控制,baidu音樂,天天靜聽很遺憾的就沒有實現,所以他們兩個是可以跟別的播放器同時播放的)
    //AUDIOFOCUS_LOSS_TRANSIENT:你會短暫的失去音頻焦點,你可以暫停音樂,但不要釋放資源,因爲你一會就可以奪回焦點並繼續使用
    //AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:你的焦點會短暫失去,但是你可以與新的使用者共同使用音頻焦點

private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener(){
        public void onAudioFocusChange(int focusChange) {
            switch(focusChange){
                case AudioManager.AUDIOFOCUS_LOSS:
                    if(isPlaying()){
                      //we do not need get focus back in this situation
                      //會長時間失去,所以告知下面的判斷,獲得焦點後不要自動播放
                        mPausedByTransientLossOfFocus = false;
                        pause();//因爲會長時間失去,所以直接暫停
                    }
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    if(isPlaying()){
                       //短暫失去焦點,先暫停。同時將標誌位置成重新獲得焦點後就開始播放
                        mPausedByTransientLossOfFocus = true;
                        pause();
                    }
                    break;
                case AudioManager.AUDIOFOCUS_GAIN:
                    //重新獲得焦點,且符合播放條件,開始播放
                    if(!isPlaying()&&mPausedByTransientLossOfFocus){
                        mPausedByTransientLossOfFocus = false;
                        resume();
                    }
                    break;
            }
        }};

//釋放音頻焦點
mAudioManager.abandonAudioFocus(mAudioFocusListener);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章