IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android 管理音频焦点 -> 正文阅读

[移动开发]android 管理音频焦点

android 管理音频焦点

1.AudioFocusUtils 工具类

package com.example.goldreward.util;

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

/**
 * @author : Code23
 * @time : 2021/7/5
 * @module : AudioFocusUtils
 * @describe :音频焦点工具类
 */
public class AudioFocusUtils {
    //音频焦点管理
    private static AudioManager audioManager;

    /**
     * 初始化音频焦点
     *
     * @param context 上下文
     */
    public static void initAudioFocus(Context context) {
        if (audioManager == null) {
            //音频焦点
            audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            //android8.0之后申请焦点方式
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                //AudioAttributes 配置(多媒体场景,申请的是音乐流)
                AudioAttributes audioAttributes = new AudioAttributes.Builder()
                        .setUsage(AudioAttributes.USAGE_MEDIA)
                        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                        .build();
                // 初始化AudioFocusRequest
                AudioFocusRequest audioFocusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
                        .setAudioAttributes(audioAttributes)
                        //设置是否允许延迟获取焦点
                        .setAcceptsDelayedFocusGain(true)
                        //设置AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK会暂停,系统不会压低声音
                        .setWillPauseWhenDucked(true)
                        //设置焦点监听回调
                        .setOnAudioFocusChangeListener(onAudioFocusChangeListener)
                        .build();
                //申请焦点
                audioManager.requestAudioFocus(audioFocusRequest);
            } else {//android8.0之前申请焦点方式
                audioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
            }
        }
    }

    /**
     * 注销音频焦点
     */
    public static void abandonAudioFocus() {
        if (audioManager != null) {
            audioManager.abandonAudioFocus(onAudioFocusChangeListener);
            audioManager = null;
        }
    }

    /**
     * 音频焦点监听
     */
    private static AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
        @Override
        public void onAudioFocusChange(int focusChange) {
            switch (focusChange) {
                //失去音频焦点
                case AudioManager.AUDIOFOCUS_LOSS:
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    if (onAudioFocusListener != null) {
                        onAudioFocusListener.onLossAudioFocus();
                    }
                    break;
                //重新获取音频焦点
                case AudioManager.AUDIOFOCUS_GAIN:
                    if (onAudioFocusListener != null) {
                        onAudioFocusListener.onGainAudioFocus();
                    }
                    break;
            }
        }
    };

    private static OnAudioFocusListener onAudioFocusListener;

    public static void setOnAudioFocusListener(OnAudioFocusListener onAudioFocusListener) {
        AudioFocusUtils.onAudioFocusListener = onAudioFocusListener;
    }

    public interface OnAudioFocusListener {
        //失去焦点
        void onLossAudioFocus();

        //获取焦点
        void onGainAudioFocus();
    }
}

2.在activity使用AudioFocusUtils

package com.example.goldreward.activity;

import android.app.Activity;
import android.os.Bundle;

import androidx.annotation.Nullable;

import com.example.goldreward.util.AudioFocusUtils;

/**
 * @author : Code23
 * @time : 2021/7/5
 * @module : AudioFocusActivity
 * @describe :音频焦点Activity
 */
public class AudioFocusActivity extends Activity implements AudioFocusUtils.OnAudioFocusListener {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //申请音频焦点
        AudioFocusUtils.initAudioFocus(this);
    }

    /**
     * 失去焦点
     */
    @Override
    public void onLossAudioFocus() {
        //处理暂停音频播放
    }

    /**
     * 重新获取焦点
     */
    @Override
    public void onGainAudioFocus() {
        //处理重新播放音频
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解绑音频焦点
        AudioFocusUtils.abandonAudioFocus();
    }
}

3.有兴趣可以去看看谷歌官方的管理音频焦点文档

谷歌官方文档:管理音频焦点

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-07 00:02:59  更:2021-07-07 00:04:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 9:05:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码