有什么网站可以做编程题/关键词网站排名软件

有什么网站可以做编程题,关键词网站排名软件,网站换肤代码,佛山网站建设网站建设收费Android 音频焦点详解 音频焦点(Audio Focus)是 Android 系统用于协调多个应用同时访问音频输出的机制。当多个应用需要播放音频时,音频焦点确保用户听到的内容不会混乱(如多个音乐应用同时播放)。以下从核心概念、使…

Android 音频焦点详解

音频焦点(Audio Focus)是 Android 系统用于协调多个应用同时访问音频输出的机制。当多个应用需要播放音频时,音频焦点确保用户听到的内容不会混乱(如多个音乐应用同时播放)。以下从核心概念、使用场景和代码实现三个方面展开说明。

一、音频焦点的核心概念

  1. 音频焦点的类型

    • 永久性焦点:长时间占用焦点(如音乐播放器)。
    • 短暂性焦点:临时占用焦点(如导航提示音)。
    • Ducking:短暂降低其他应用音量(如通知音)。
  2. 焦点请求模式

    • AUDIOFOCUS_GAIN:请求长期焦点,其他应用需停止播放。
    • AUDIOFOCUS_GAIN_TRANSIENT:短暂占用焦点,其他应用需暂停。
    • AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:短暂占用焦点,其他应用降低音量(Ducking)。
    • AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE:短暂独占焦点(如语音录制)。
  3. 焦点丢失处理
    当其他应用请求焦点时,当前应用需根据情况暂停播放、停止播放或降低音量。

二、代码实现与分析

1. 请求音频焦点

使用 AudioManager 请求焦点,并监听焦点变化。

// 初始化 AudioManager
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);// 创建焦点变化监听器
AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() {@Overridepublic void onAudioFocusChange(int focusChange) {switch (focusChange) {case AudioManager.AUDIOFOCUS_GAIN:// 重新获得焦点,恢复播放mediaPlayer.start();mediaPlayer.setVolume(1.0f, 1.0f);break;case AudioManager.AUDIOFOCUS_LOSS:// 永久丢失焦点,停止播放并释放资源mediaPlayer.stop();audioManager.abandonAudioFocus(afChangeListener);break;case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:// 暂时丢失焦点,暂停播放mediaPlayer.pause();break;case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:// 短暂降低音量mediaPlayer.setVolume(0.2f, 0.2f);break;}}
};// 请求音频焦点(以 AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK 为例)
int result = audioManager.requestAudioFocus(afChangeListener,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {// 焦点获取成功,开始播放mediaPlayer.start();
} else {// 焦点获取失败,处理逻辑
}
2. 释放音频焦点

在播放结束或应用暂停时释放焦点:

audioManager.abandonAudioFocus(afChangeListener);
3. Android 8.0+ 的 AudioFocusRequest(API 26+)

对于 Android 8.0 及以上设备,使用 AudioFocusRequest 更灵活:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {AudioFocusRequest focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).setAudioAttributes(new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build()).setAcceptsDelayedFocusGain(true) // 允许延迟获取焦点.setOnAudioFocusChangeListener(afChangeListener).build();int result = audioManager.requestAudioFocus(focusRequest);
}

三、使用函数

  1. 生命周期管理

    • onPause()onStop() 中释放焦点。
    • onResume() 中重新请求焦点(视场景而定)。
  2. Ducking 实现
    AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK 回调中降低音量,而非暂停播放。

  3. 处理延迟焦点
    Android 8.0+ 支持延迟获取焦点,需在 AudioFocusRequest 中配置 setAcceptsDelayedFocusGain(true)

四、实际使用

通话打断音乐

一、通话打断音乐的流程
  1. 电话应用的优先级
    通话属于高优先级音频场景,系统会强制其他应用让出音频焦点。当来电时,电话应用会请求 AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE 类型的焦点(短暂独占),以确保通话音频的独占性。

  2. 音乐播放器的响应
    音乐播放器在失去焦点时,会通过注册的 OnAudioFocusChangeListener 收到 AUDIOFOCUS_LOSSAUDIOFOCUS_LOSS_TRANSIENT 回调,此时需暂停播放。

  3. 通话结束后的恢复
    当通话结束时,电话应用释放焦点,音乐播放器可能重新获得焦点(需主动重新请求),恢复播放。

二、代码示例与分析
1. 音乐播放器的焦点处理
// 初始化 AudioManager 和焦点监听器
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
MediaPlayer mediaPlayer = new MediaPlayer();AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() {@Overridepublic void onAudioFocusChange(int focusChange) {switch (focusChange) {case AudioManager.AUDIOFOCUS_LOSS:// 永久丢失焦点(如通话开始)mediaPlayer.pause();audioManager.abandonAudioFocus(this); // 主动释放焦点break;case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:// 暂时丢失焦点(如短暂通话提示)mediaPlayer.pause();break;case AudioManager.AUDIOFOCUS_GAIN:// 重新获得焦点(如通话结束)if (!mediaPlayer.isPlaying()) {mediaPlayer.start();}break;}}};// 播放音乐前请求焦点
int result = audioManager.requestAudioFocus(afChangeListener,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN
);if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {mediaPlayer.start();
}
2. 电话应用的行为(系统级实现)

电话应用的音频焦点请求由系统自动处理,开发者无需手动实现。其核心逻辑类似:

// 系统电话应用的简化逻辑
audioManager.requestAudioFocus(phoneFocusListener,AudioManager.STREAM_VOICE_CALL,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
);
三、关键注意事项
  1. 无需手动处理通话打断
    音乐播放器只需正确实现 OnAudioFocusChangeListener,系统会自动触发暂停逻辑。开发者无需监听通话状态。

  2. 恢复播放的策略

    • 如果通话短暂(如未接来电),焦点可能自动恢复(AUDIOFOCUS_GAIN),音乐自动播放。
    • 若通话时间较长(如持续通话),建议在 onResume() 中重新请求焦点。
  3. 与其他高优先级场景的兼容
    除通话外,导航提示、警报声等也会通过音频焦点机制中断音乐,处理逻辑一致。

  4. Android 8.0+ 的适配
    在 Android 8.0 及以上版本,建议使用 AudioFocusRequest 对象(需检查版本):

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {AudioFocusRequest focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).setAudioAttributes(new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build()).setOnAudioFocusChangeListener(afChangeListener).build();audioManager.requestAudioFocus(focusRequest);
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LangChain 基础

一、LangChain 模块和体系 LangChain 是一个用于开发由大型语言模型(LLMs)驱动的应用程序的框架。 官方文档:https://python.langchain.com/docs/introduction/ LangChain 简化了LLM应用程序生命周期的每个阶段: 开发&#xf…

Parsing error: Unexpected token, expected “,“

今天在使用Trae AI 编程工具开发大文件切片上传功能,使用的是VUE3,TS技术栈,开发完成运行时,编译报错(Parsing error: Unexpected token, expected ","),让AI自行修复此问题多次后还是没有解决&a…

农用车一键启动工作原理

移动管家农用车一键启动的工作原理与普通汽车类似,主要依赖于无线射频识别技术(RFID)。以下是具体的工作步骤和原理: 智能钥匙识别: 车主携带智能钥匙靠近车辆时,钥匙通过发射射频信号与车辆进行交互。车辆…

Cursor从小白到专家

文章目录 1:简单开发一个贪吃蛇游戏规则设置提示词 cursor开发小工具开发整体步骤创建.cursorrules输入提示词composer模式chat模式 执行cursor accept all发布到线上进行分享 cursor开发一个浏览器插件创建.cursorrulescursor rules范例集工具 输入提示词执行curso…

MAC+PHY 的硬件连接

文章目录 以太网的 MAC 与 PHY简介硬件拓扑CPU集成MAC与PHYCPU集成MAC,PHY采用独立芯片CPU不集成MAC与PHY,MAC与PHY采用集成芯片 在 OSI 分层中的位置MACPHYMAC 与 PHY 数据交互参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记,文末均…

仿函数 VS 函数指针实现回调

前提: 本博客对比 函数指针实现回调 和 仿函数 ,突出仿函数的优势。 目的: 一个类要能够灵活的调用两个函数,essfc 和 greaterfc,分别用于比较两个整数的大小: ①:lessfc:判断 x …

CH32V208蓝牙内部带运放32位RISC-V工业级微控制器

开发板 CH32V208CBU6立创格式的开发板上述链接可下载,官方文件进行了转换,使用前请仔细核对。 CH32V208CBU6原理图,上述图片为芯片部分。已进行DRC。 CH32V208CBU6 PCB三维图,上述图片为芯片部分。已进行DRC。 概述 CH32V208C…

整理和总结微信小程序的高频知识点

前言 近期萌生了一些想法,感觉可以做一个小程序作为产出。 但小程序做得比较少,因此边做边复习。整理和总结了一些高频知识点和大家一起分享。 一、模板和组件 1.1模板(Template) 优势 简单灵活:模板定义和使用都较…

1996-2023年各省公路里程数据(无缺失)

1996-2023年各省公路里程数据(无缺失) 1、时间:1996-2023年 2、来源:国家统计局、统计年鉴 3、指标:公路里程(万公里) 4、范围:31省 5、指标解释:公路里程指报告期末…

Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.7~2.9)

1. NAN 介质访问控制层(MAC) NAN MAC负责通过参与 NAN同步信标帧(NAN Synchronization Beacon frame)的传输,获取并维护设备所在的NAN集群的同步。作为同步功能的一部分,NAN MAC运行 TSF 定时器。NAN MAC还…

《Python实战进阶》No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成

No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成 摘要 持续集成(CI)和持续部署(CD)是现代软件开发中不可或缺的实践,能够显著提升开发效率、减少错误并加速交付流程。本文将探讨如何利用 GitHub Actio…

HR人员和组织信息同步AD域服务器实战方法JAVA

HR人员和组织信息同步AD域服务器 前期准备AD域基础知识整理HR同步AD的逻辑代码结构配置文件设置启动类HR组织的BeanHR人员Bean获取HR人员和组织信息的类AD中处理组织和人员的类日志配置 POM.xml文件生成EXE文件服务器定时任务异常问题注意事项 前期准备 1、开发语言&#xff1…

修改服务器windows远程桌面默认端口号

修改服务器windows远程桌面默认端口号 在Windows服务器上修改远程桌面协议(RDP)的默认端口(3389)可以增强服务器的安全性,减少被恶意扫描和攻击的风险。以下是修改远程端口的详细步骤: 按 Win R 打开运行…

MuJoCo 仿真 Panda 机械臂!末端位置实时追踪 + 可视化(含缩放交互)

视频讲解: MuJoCo 仿真 Panda 机械臂!末端位置实时追踪 可视化(含缩放交互) 仓库地址:GitHub - LitchiCheng/mujoco-learning 本期介绍下,mujoco_py这个库很老了,最新的版本可以通过mujoco的p…

在Mac M1/M2芯片上完美安装DeepCTR库:避坑指南与实战验证

让推荐算法在Apple Silicon上全速运行 概述 作为推荐系统领域的最经常用的明星库,DeepCTR集成了CTR预估、多任务学习等前沿模型实现。但在Apple Silicon架构的Mac设备上,安装过程常因ARM架构适配、依赖库版本冲突等问题受阻。本文通过20次环境搭建实测…

spring boot 拦截器

1、创建ServletConfig配置类 package com.pn.config;import com.pn.filter.LoginFilter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.web.servlet.Fil…

论文阅读笔记:Denoising Diffusion Probabilistic Models (2)

接论文阅读笔记:Denoising Diffusion Probabilistic Models (1) 3、论文推理过程 扩散模型的流程如下图所示,可以看出 q ( x 0 , 1 , 2 ⋯ , T − 1 , T ) q(x^{0,1,2\cdots ,T-1, T}) q(x0,1,2⋯,T−1,T)为正向加噪音过程, p ( x 0 , 1 , …

【大模型基础_毛玉仁】3.5 Prompt相关应用

目录 3.5 相关应用3.5.1 基于大语言模型的Agent3.5.2 数据合成3.5.3 Text-to-SQL3.5.4 GPTs 3.5 相关应用 Prompt工程应用广泛,能提升大语言模型处理基础及复杂任务的能力,在构建Agent、数据合成、Text-to-SQL转换和设计个性化GPTs等方面不可或缺。 . …

深入理解 Linux ALSA 音频架构:从入门到驱动开发

文章目录 一、什么是 ALSA?二、ALSA 系统架构全景图核心组件详解:三、用户空间开发实战1. PCM 音频流操作流程2. 高级配置(asound.conf)四、内核驱动开发指南1. 驱动初始化模板2. DMA 缓冲区管理五、高级主题1. 插件系统原理2. 调试技巧3. 实时音频优化六、现代 ALSA 发展七…

探秘海螺 AI 视频与计算机视觉算法的奇妙融合

目录 开篇:数字浪潮下的视频新变革 蓝耘 Maas 平台与海螺 AI 视频:崭露头角的视频创作利器 图片生成视频:化静为动的魔法 文本生成视频:文字到画面的奇妙转换 注册与登录 计算机视觉算法:海螺 AI 视频的核心驱动力…