前言

焦点管理是Android中比较重要的一个点,这也是Android对播放器的一个约束条件,但手机上的播放器应用都不太准守这个准则,所以就就可以存在混音问题。

这里记录一下我自己的理解,当然,由于文笔过于拙,内容不会分享,谢谢。

正文

代码片段

AudioFocusManager.java

public class AudioFocusManager {
    private final String TAG = FileApp.TAG + getClass().getSimpleName();
    private AudioFocusRequest mAudioFocusRequest = null;
    private AudioManager mAudioManager;

    public AudioFocusManager() {
        mAudioManager = (AudioManager) FileApp.getContext().getSystemService(Context.AUDIO_SERVICE);
    }

    public void release() {
        mAudioManager = null;
    }

    /**
     * @param listener     设置焦点状态监听
     * @param usage        设置场景(Build.VERSION_CODES.O后支持)
     * @param streamType   设置的流媒体类型
     * @param durationHint 设置的焦点状态类型
     * @param acceptDelay  设置接受延迟(Build.VERSION_CODES.O后支持)
     */
    public int requestAudioFocus(AudioManager.OnAudioFocusChangeListener listener, int usage, int streamType, int durationHint, boolean acceptDelay) {
        if (null == mAudioManager || null == listener) {
            Log.d(TAG, "requestAudioFocus null... ");
            return -1;
        }
        mAudioFocusRequest = new AudioFocusRequest.Builder(durationHint)
                .setAudioAttributes(new AudioAttributes.Builder().setUsage(usage).setContentType(streamType).build())
                .setAcceptsDelayedFocusGain(acceptDelay)
                .setOnAudioFocusChangeListener(listener).build();
        return mAudioManager.requestAudioFocus(mAudioFocusRequest);
    }


    /**
     * 释放焦点
     *
     * @param listener 焦点状态监听
     */
    public void abandonAudioFocusRequest(AudioManager.OnAudioFocusChangeListener listener) {
        if (null == mAudioManager || null == listener) {
            Log.d(TAG, "abandonAudioFocusRequest null... ");
            return;
        }
        mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest);
    }
}

如何使用:

        if (null != mAudioFocusManager) {
            int status = mAudioFocusManager.requestAudioFocus(this, AudioAttributes.USAGE_MEDIA,
                    AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN, true);
            Log.d(TAG, "registerSource status : " + status);
        }

焦点申请

隐藏内容!
付费阅读后才能查看!
2
多个隐藏块只需支付一次

参考文章

  1. Android源代码

相关文章

暂无评论

none
暂无评论...