Android焦点管理类AudioFocusManager

Android  2021年1月13日 pm7:41发布4年前 (2021)更新 91es.com站长
65 0 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. 2024: 反射之泛型类简单介绍(1条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

林清玄:再加两个苹果

一位小学老师对我说起,他怎么使一班小学生被改造的秘诀。他的学生在低年级的时候遇到一个非常严格的老师,给学生的作业很多,而给学生的评价却很低。在这位老师的笔下很少有学生可以得到甲,得到乙已经很不错,有许多学生拿到丙、丁,使得学生的家长对自己的孩子都不谅解,学生对学习也逐渐失去信心了。当这班学生升到...

MediaPlayer异常

前言播放媒体测试时,出现Mediaplayer报异常问题,如下打印日志MediaPlayerNative(13594): start called in state 4, mPlayer(0x75b4e81280)MediaPlayerNative(13594): error (-38, 0...

[摘]dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

前言最近因为一个紧急的项目,客户要求摘他另外一个客户的样机,为了赶进度,我们通过反编译样机中的应用,获取UI和布局等。但,做出来后,效果总感觉有些不一样,比如显示的字体大小。最后发现,我们调试的样机分辨率虽然跟样机一样,但密度不一样。客户的样机:240dpi我们的设备:160dpi获取...

郁达夫:北平的四季

对于一个已经化为异物的故人,追怀起来,总要先想到他或她的好处;随后再慢慢的想想,则觉得当时所感到的一切坏处,也会变作很可寻味的一些纪念,在回忆里开花。关于一个曾经住过的旧地,觉得此生再也不会第二次去长住了,身处入了远离的一角,向这方向的云天遥望一下,回想起来的,自然也同样地只是它的好处。中国的大都...

startService()源码分析

前言startService()源码分析之前Android 6.0是有简单分析过的,但太久了,而且记录也很粗糙,到现在也忘记得差不多了。最近抽空重新走一下,也算是自己的复习吧。这里看的是Android P的源代码。正文这里是Apk1去启动Apk2的服务(Apk2没有启动过)Intent...

严歌苓:读书是生命的另一种存在

一、我关于阅读与写作的记忆我出生在一个书香家庭,父亲虽是作家,但他很少用自己的文学理念影响我。在我的生活学习中,父亲就是一个很客观的教师,是我一生中最好的文学伴侣,最好的交流文学的朋友。父亲常与我沟通他最近读的好书,也会建议我去读。每天早上不管多忙,我都要拿出一小时与父亲喝咖啡,然后谈一谈我最近...