Android中关于焦点的记录

Android  2022年9月20日 am8:09发布2年前 (2022)更新 城堡大人
130 0 0

前言

焦点管理是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
3
多个隐藏块只需支付一次

参考文章

  1. Android源代码

 历史上的今天

  1. 2024: 去除磁盘中Video,Music,Ringtones等目录(0条评论)
  2. 2021: 刘大白:秋江的晚上(0条评论)
  3. 2019: 胡适:人生问题(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

RecyclerView的简单实用

RecyclerVier简介RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。添加RecyclerView 依赖库 ...

《MySQL基础教程》笔记8

前言主要是介绍PHP脚本操作MySQL。根据《MySQL基础教程-西泽梦路》学习,简单的做一下笔记。记录于此,方便自己回忆。正文PDO什么是PDOPDO是PHP 5.1.0及更高版本中定义的标准数据库连接机制,其目的是更方便地利用数据库。PDO是用于管理数据库的“类”(class),...

反射之获取类的构造函数等

前言记录一下反射相关内容,摘抄于此,方便自己查阅。反射技术包括如下内容:根据一个字符串得到一个类的对象获取一个类的所有公用或私有、静态或实例的字段,方法,属性对泛类型的反射正文本文介绍反射之获取类的构造函数以及其属性,方法。在反射前,需要新增一个类用于测试,这创建一...

JNI异常的使用

前言JNI中也存在异常,如果出现异常不处理就会让程序崩溃。因此JNI中定义了异常相关函数用于处理异常。下面就介绍一写常用的异常处理函数。正文Throw# env : JNI接口指针# obj : 一个java.lang.Throwable对象# 如果成功时返回0;失败时为负值jint...

圆形顺时针滚动ImageView

前言记录一下项目中用的圆形顺时针滚动的自定义ImageView,当然也可以顺时针滚动。主要是代码片段。正文记录于此,方便自己查阅。隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付费阅读参考文章

去除磁盘中Video,Music,Ringtones等目录

前言在Android设备中插入U盘,会自动生成一堆默认目录,比如Music,Podcasts,Ringtones和Pictures等目录。现在客户需求不要这些目录,因此,需要去影藏。正文当然U盘中还存LOST.DIR 用于保存文件系统崩溃或其他问题期间恢复的文件Android   ...