Android焦点管理类AudioFocusManager

Android 3xcn.com@站长2021年1月13日 pm7:41发布3个月前更新
0
导航号,我的单页导航
目录

前言

大家都知道,从Android 8开始 焦点的申请方式变了,因此,为了兼容不同的Android版本,因此整理在AudioFocusManager中统一管理。

正文

其实代码就是 根据当前Android系统版本的判断,然使用不同的参数进行申请焦点和释放焦点,这样用户使用时就不需要考虑版本不同。

直接上代码AudioFocusManager.java

package com.la.audiotools;

import android.content.Context;
import android.media.AudioAttributes;
import android.media.AudioFocusRequest;
import android.media.AudioManager;
import android.os.Build;
import android.util.Log;


/**
 * 焦点申请管理类
 */
public class AudioFocusManager {

    private static final String TAG = AudioFocusManager.class.getSimpleName();

    private AudioFocusRequest mAudioFocusRequest = null;
    private AudioManager mAudioManager = null;


    public AudioFocusManager(Context context) {
        if (null == context) {
            //这里最好获取一下Application中的Context(略)
            Log.d(TAG, "AudioFocusManager null... ");
        }
        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    }

    /**
     * @param listener     设置焦点状态监听
     * @param usage        设置场景(Build.VERSION_CODES.O后支持)
     * @param streamType   设置的流媒体类型
     * @param durationHint 设置的焦点状态类型
     * @param acceptDelay  设置接受延迟(Build.VERSION_CODES.O后支持)
     * @return
     */
    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;
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage(usage).setContentType(streamType).build();
            mAudioFocusRequest = new AudioFocusRequest.Builder(durationHint)
                    .setAudioAttributes(audioAttributes)
                    .setAcceptsDelayedFocusGain(acceptDelay)
                    .setOnAudioFocusChangeListener(listener).build();
            return mAudioManager.requestAudioFocus(mAudioFocusRequest);
        } else {
            return mAudioManager.requestAudioFocus(listener, streamType, durationHint);
        }
    }

    /**
     * 释放焦点
     *
     * @param listener 焦点状态监听
     * @return
     */
    public int abandonAudioFocusRequest(AudioManager.OnAudioFocusChangeListener listener) {
        if (null == mAudioManager || null == listener) {
            Log.d(TAG, "abandonAudioFocusRequest null... ");
            return -1;
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) {
            if(null != mAudioFocusRequest){
                return -1;
            }
            return mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest);
        } else {
            return mAudioManager.abandonAudioFocus(listener);
        }
    }
}

因此用户只需要初始化AudioFocusManager然后设置监听和注销监听了。

参考文章

  1. Android 官方文档

  2. Android 8.0后音频焦点处理小结

版权声明 1、 本站名称 91易搜
2、 本站网址 https://www.91es.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权请留言
4、 本站禁止发布或转载任何违法的相关信息,如有发现请向站长举报
导航号,我的单页导航

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...