Android音频焦点AudioFocus处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lin_dianwei/article/details/82625797

音频焦点是Android系统统一音视频播放的一个规则,避免多个应用同时在播放音视频,导致声音很杂。

如果大家都按照这个规则进行开发,那么当你获取焦点进行播放时,其他正在播放的应用就会失去焦点暂停播放,这样体验会好很多。

但是实际上这规则并不具有强制性,所以也会有很多不按套路出牌的应用存在着,这里仅讨论怎么按套路出牌。

一般音视频应用需要完成以下三步,可以根据实际需要,但是建议尽量按照常规处理,具体使用注释已经详细说明了。

一、请求焦点:

private void requestAudioFocus(){
        AudioManager am = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
        if (am != null) {
            //请求焦点的参数说明:
            //AUDIOFOCUS_GAIN:想要长期占有焦点,失去焦点者stop播放和释放
            //AUDIOFOCUS_GAIN_TRANSIENT:想要短暂占有焦点,失去焦点者pause播放
            //AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:想要短暂占有焦点,失去焦点者可以继续播放但是音量需要调低
            //AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE:想要短暂占有焦点,但希望失去焦点者不要有声音播放
            am.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
        }
    }

二、释放焦点:

private void abandonAudioFocus(){
        AudioManager am = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
        if (am != null) {
            am.abandonAudioFocus(mAudioFocusListener);
        }
    }

三、焦点改变监听:

private AudioManager.OnAudioFocusChangeListener mAudioFocusListener = new AudioManager.OnAudioFocusChangeListener() {
        public void onAudioFocusChange(int focusChange) {
            switch(focusChange){
                case AudioManager.AUDIOFOCUS_LOSS:
                    //对应AUDIOFOCUS_GAIN
                    //表示音频焦点请求者需要长期占有焦点,这里一般需要stop播放和释放

                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    //对应AUDIOFOCUS_GAIN_TRANSIENT
                    //表示音频焦点请求者需要短暂占有焦点,这里一般需要pause播放

                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    //对应AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
                    //表示音频焦点请求者需要占有焦点,但是我也可以继续播放,只是需要降低音量或音量置为0

                    break;
                case AudioManager.AUDIOFOCUS_GAIN:
                    //获得焦点,这里可以进行恢复播放

                    break;
            }
        }
    };

猜你喜欢

转载自blog.csdn.net/lin_dianwei/article/details/82625797