前言
大家都知道,从Android 8开始 焦点的申请方式变了,因此,为了兼容不同的Android版本,因此整理在AudioFocusManager中统一管理。
正文
直接上代码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然后设置监听和注销监听了。
参考文章
《》
《
© 版权声明