解决音频焦点问题

解决音频焦点问题

Android audio系统
-- 当打开音视频时处理与一个后台播放中的音频的冲突

 private void requestAudioFocus() {
        audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
        if (audioManager != null) {
            //请求焦点的参数说明:
            //AUDIOFOCUS_GAIN:想要长期占有焦点,失去焦点者stop播放和释放
            //AUDIOFOCUS_GAIN_TRANSIENT:想要短暂占有焦点,失去焦点者pause播放
            //AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:想要短暂占有焦点,失去焦点者可以继续播放但是音量需要调低
            //AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE:想要短暂占有焦点,但希望失去焦点者不要有声音播放
            audioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
        }
    }
 private void abandonAudioFocus() {
        audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
        if (audioManager != null) {
            audioManager.abandonAudioFocus(mAudioFocusListener);
        }
    }
    private AudioManager.OnAudioFocusChangeListener mAudioFocusListener = new AudioManager.OnAudioFocusChangeListener() {
        @Override
        public void onAudioFocusChange(int focusChange) {
            switch (focusChange) {
                case AudioManager.AUDIOFOCUS_LOSS:
                    //对应AUDIOFOCUS_GAIN 表示音频焦点请求者需要长期占有焦点,这里一般需要stop播放和释放
                    // pauseMediaPlayer();
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    //对应AUDIOFOCUS_GAIN_TRANSIENT 表示音频焦点请求者需要短暂占有焦点,这里一般需要pause播放
                    //pauseMediaPlayer();
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    //对应AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK 表示音频焦点请求者需要占有焦点,但是我也可以继续播放,只是需要降低音量或音量置为0
                    break;
                case AudioManager.AUDIOFOCUS_GAIN:
                    //获得焦点,这里可以进行恢复播放
                    if (mediaPlayer != null) {
                       //  startMediaPlayer();
                    }
                    break;
                default:
            }
        }
    };

以上自定义后台播放音乐小控件的音频焦点逻辑,其他音频播放时暂停 ,其他音视频停止播放时恢复播放。一般的音视频播放都会遵循这样的逻辑,如果音视频焦点未设置,可以在控件初始化时(播放时)申请焦点,控件释放时(停止播放时)释放焦点达到目的 。

貌似在Android 9.0设备上面需要单独适配,项目中换了另外一种方案。

你可能感兴趣的:(解决音频焦点问题)