前言
焦点管理是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);
        }
![[摘]Android对Bitmap缩放图片的记录](https://www.biumall.com/wp-content/themes/BiuX/assets/images/random/0.webp)