[Android Training视频系列] 8.2 Managing Audio Focus

AI安全护栏评测:TrustedExecBench如何量化评估大模型防护能力 在人工智能和机器学习领域,模型安全对齐是确保AI系统可靠、可控的核心技术。其原理是通过设计安全机制(即“护栏”)来约束模型行为,防止生成有害、偏见或越界内容。这项技术的核心价值在于平衡AI能力与风险管控,是可信AI部署的基石。应用场景广泛覆盖内容审核、对话系统、代码生成等需要人机交互的领域。本文聚焦的TrustedExecBench项目,正是针对“护栏”性能量化评估这一痛点,提供了一个标准化、自动化的开源评测框架。该工具通过构建多维度的恶意测试套件,并引入基于模型的动态评判机制,能够系统性地检验大语言模型在 阅读详情

视频讲解:http://www.eyeandroid.com/thread-15896-1-1.html

由于很多应用程序都可以播放音频,因此在播放前考虑它们如何交互就显得很重要了,为了避免同时出现多个声音,Android使用音频焦点(AudioFocus)来控制音频的播放 - 仅仅是获取到Audio Focus的应用程序才能够播放音频。

       在应用程序开始播放音频之前,它需要经过发出请求[request]à接受请求[receive] à音频焦点锁定[AudioFocus]的过程。同样它需要知道如何监听音频焦点的丢失并进行合适的响应。

       请求获取音频焦点

       在开始播放音频之前,应用程序必须先获取需要处理的音频流的音频焦点。音频焦点可以通过requestAudioFocus()方法获得,在音频焦点成功获取后,该方法会返回AUDIOFOCUS_REQUEST_GRANTED常量,否则会返回AUDIOFOCUS_REQUEST_FAILED常量。

       我们必须指定正在使用的是哪个音频流,而且是否想请求短暂还是永久的Audio Focus。短暂的焦点锁定:当期待播放一个短暂的音频的时候(比如播放导航指示);永久的焦点锁定:当计划播放可预期到的较长的音频的时候(比如播放音乐)。

       下面是一个在播放音乐的时候请求永久音频焦点的例子,我们必须在开始播放之前立即请求音频焦点,比如在用户点击播放或者游戏程序中下一关开始的片头音乐。

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);

...

// Request audio focus for playback

int result = am.requestAudioFocus(afChangeListener,// Use the music stream.

                            AudioManager.STREAM_MUSIC,// Request permanent focus.

                            AudioManager.AUDIOFOCUS_GAIN);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {

    am.registerMediaButtonEventReceiver(RemoteControlReceiver);

    // Start playback.

}

       一旦结束了播放,需要确保调用abandonAudioFocus()方法。这样会通知系统说你不再需要获取焦点并且取消注册AudioManager.OnAudioFocusChangeListener的监听。如果是释放短暂音频焦点的情况下,可以让之前被打断的应用程序继续播放。

// Abandon audio focus when playback complete   

am.abandonAudioFocus(afChangeListener);

       当请求短暂音频焦点的时候,我们可以选择是否开启“ducking”。Ducking是一个特殊的机制使得允许音频间歇性的短暂播放。

通常情况下,一个好的应用程序在失去音频焦点的时候它会立即保持安静。如果我们选择在请求短暂音频焦点的时候开启了ducking,那意味着其它应用程序可以继续播放,仅仅是在这一刻降低自己的音量,在重新获取到音频焦点后恢复正常音量(也就是说:不用理会这个短暂焦点的请求,这并不会导致目前在播放的音频受到牵制,比如在播放音乐的时候突然出现一个短暂的短信提示声音,这个时候仅仅是把播放歌曲的音量暂时调低,好让短信声能够让用户听到,之后立马恢复正常播放)。

// Request audio focus for playback

int result = am.requestAudioFocus(afChangeListener,// Use the music stream.

                             AudioManager.STREAM_MUSIC,// Request permanent focus.

                             AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {

    // Start playback.

}

       Ducking非常适合间歇性播放音频的应用程序,例如播放导航仪的提示。

       当其他应用程序通过上述方式请求音频焦点时,您所注册的监听器可以判断是否获丢失了长期或短暂(可以选择是否支持Ducing)的音频焦点。

       处理失去音频焦点

       应用程序请求并得到音频焦点后,当其他应用程序请求焦点时,先前的应用程序就会失去焦点。您的应用程序需要根据失去音频焦点的类型来进行相应的处理。

       请求音频焦点时注册的音频焦点监听器中有onAudioFocusChange(int)回调函数,该回调函数会接收描述焦点变化事件的参数。需要注意的是,失去音频焦点的事件类型与请求焦点的类型相对应——失去长期焦点(AUDIOFOCUS_LOSS)、短暂焦点(AUDIOFOCUS_LOSS_TRANSIENT)和Ducking方式的短暂焦点(AUDIOFOCUS_LOSS_TRANSIENT)。

       失去短暂焦点:一般情况下,应用程序在失去短暂音频焦点时,应该停止播放并记录下播放状态。而且需要继续监听音频焦点的变化,当重新获得音频焦点时,需要在从先前暂停的地方继续播放。

       失去永久焦点:假设另外一个程序开始播放音乐等,那么我们的程序就应该有效的结束自己。实用的做法是停止播放,移除Media Button监听广播,允许新的音频播放器独占监听那些按钮事件,并且放弃自己的音频焦点。

       在下面的代码中,当应用程序失去短暂的音频焦点时会暂停播放,当重新获得焦点时会继续播放。当失去的是长期音频焦点时,就会取消媒体按键事件接收器的注册并停止对音频焦点变化的监听。

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {

    public void onAudioFocusChange(int focusChange) {

        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT

            // Pause playback

        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {

            // Resume playback

        } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {

            am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);

            am.abandonAudioFocus(afChangeListener);

            // Stop playback

        }

    }

};

       在上面失去短暂焦点的例子中,如果允许ducking,那么我们可以选择“duck”的行为而不是暂停当前的播放。

       闪避

       Ducking是一个特殊的机制使得允许音频间歇性地短暂播放。在Ducking的情况下,正常播放的歌曲会降低音量来凸显这个短暂的音频声音,这样既让这个短暂的声音比较突出,又不至于打断正常的声音。

       下面的代码会使应用程序在暂时失去焦点时降低媒体播放器的音量,并在重新获得音频焦点时恢复到原来的音量大小。

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {

    public void onAudioFocusChange(int focusChange) {

        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {

            // Lower the volume

        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {

            // Raise it back to normal

        }

    }

};

       监听失去音频焦点是最重要的广播之一,但不是唯一需要监听的广播。系统广播了一系列的intent来警示你去改变用户的音频使用体验。下节课会演示如何监视那些广播来提升用户的整体体验。
按角色定制同一张 Fiori 画面:一篇讲透 SAP Fiori UI Adaptation for Roles 的版本、优先级、视图迁移与安全边界 摘要:SAP Fiori应用中常见的问题并非功能缺失,而是同一应用被不同岗位用于不同工作流时导致界面难以满足各方需求。SAP的"角色适配UI"机制允许在不修改后端逻辑或创建新应用的情况下,为不同角色定制界面呈现。该机制包含多套界面适配方案,按用户角色自动匹配显示,同时保持统一的应用入口。实施时需注意:适配方案与原始应用共享版本管理;需设置"默认界面层";多角色用户通过优先级机制确定显示方案;界面隐藏不等于权限控制,数据安全仍需后端保障。该方案能有效解决跨岗位的界面适配 阅读详情

相关推荐

3-RRR并联机器人结构详解:从运动学到奇异点分析(附MATLAB仿真代码)

本文详细解析了3-RRR并联机器人的结构设计、运动学建模及奇异点分析,并提供了MATLAB仿真代码。通过对称性设计和可分析性,3-RRR结构成为教学与研究的理想对象。文章从基础杆件参数设置到奇异位形的实时捕捉,深入探讨了机构运动的数学本质,并分享了仿真调试中的实用技巧,助力工业自动化和精密控制应用。

sunny的博客 369

Managing Audio Playback之Managing Audio Focus

同一时间可能要好多个app在播放audio,Android用audio focus 来避免app之前互相影响.只有持有audio focus的app才可以播放audio. 可以用requestAudioFocus()来获取对应audio stream的audio focus.如果返回值是AUDIOFOCUS_REQUEST_GRANTED的话,即说明成功获得audio focus. Audio

jason的笔记 595

一文看懂—Agent多智能体协作

多智能体协作已成为AI应对复杂任务的关键范式,通过模拟人类团队分工,实现专业化、高效化和纠错能力。本文系统阐述了多智能体协作的核心概念(智能体分工、工作流编排、工具使用)、与产品规划的关联(任务拆解、错误处理、组织架构设计),以及典型应用场景(报告生成、客服工单、学习规划)。同时剖析了常见陷阱(循环卡死、信息失真、成本失控)及解决方案,并提供了实用工具模板(角色定义卡、工作流画布、成本仪表盘)。最后通过市场竞品分析和旅行规划两个实战案例,展示了多智能体协作的实际价值。该技术正推动AI从单点智能迈向系统智能,

lee006006的博客 1034

Managing Audio Focus 管理音频焦点

With multiple apps potentially playing audio it's important to think about how they should interact. To avoid every music app playing at the same time, Android uses audio focus to moderate audio playb...

移动开发记录 326

DDM-MIMO-FMCW雷达速度模糊与解模糊MATLAB仿真

本文深入解析了DDM-MIMO-FMCW雷达中的速度模糊现象及其解模糊方法,通过MATLAB仿真详细展示了相位编码解调、速度扩展算法和混合波形设计三大解决方案。文章还提供了参数配置、信号建模和结果可视化的实用技巧,并分享了工程实践中的避坑指南,帮助开发者高效解决雷达信号处理中的速度模糊问题。

weixin_31528001的博客 350

合宙Air780EP速连OneNET:AT+MQTT应用指南

本文详细讲解了合宙Air780EP使用AT指令通过MQTT接入OneNET的过程。

2401_82812461的博客 1390

.Audio Focus机制以及AudioManager的使用

原文地址:http://tanxiaoya105.blog.163.com/blog/static/210328019201272295457523/ 大纲: 一、介绍Audio Focus机制 二、AudioManager的一般使用   Android是多任务系统,Audio系统是竞争资源。( because there is only one audio output and the

winson_jason的专栏 1万+

【WRF-Chem教程-附录B】使用 MOZART 与WRF-Chem

使用MOZART与WRF-Chem

WW、forever的博客 242

2-管理Audio焦点(Managing Audio Playback)

由于许多App都可能会播放多媒体文件,对于它们之间该如何相互作用就必须要充分考虑。为了避免所有的音乐App同时播放音乐,Android系统提供了audio焦点机制来控制多媒体文件的播放,只有获得了audio焦点的App能够播放音乐。 在你的App播放音频文件之前,需要请求并接受audio焦点。同样的,需要明白如何监听audio焦点的丢失并且在其发生时妥善处理。 ...

weixin_33910759的博客 208

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 328

短信验证码逻辑漏洞学习——各种绕过姿势技巧

短信验证码逻辑漏洞学习——各种绕过姿势技巧

记录并分享学习安全的知识点.. 2557

Focus的作用及pytorch实现

用于切片操作,比如4*4*3变成了2*2*12的特征图 class Focus(nn.Module): # Focus wh information into c-space def __init__(self, c1, c2, k=1): super(Focus, self).__init__() self.conv = Conv(c1 * 4, c2, k, 1) def forward(self, x): # x(b,c,w,h) -..

weixin_38241876的博客 3797

[QMT量化交易小白入门]-九十五、多因子选股和趋势择时股票量化交易策略,年化收益率40.61%

本策略采用“双层过滤”机制:第一层基于多维度财务指标进行股票池筛选(多因子选股),第二层运用均线系统和MACD指标实施动态择时(趋势跟踪)。这种设计既保证了组合的质量下限,又能灵活应对市场波动。因子配置科学性:涵盖估值、成长、盈利、动量四大类因子风险控制精细化:设置动态止损与仓位管理机制信号验证严格性:多重条件交叉验证提升胜率。

木头大左的博客 801

【Android Advanced Training - 03】管理音频播放[Lesson 2 - 管理音频焦点Audio Focus]

Managing Audio Focus[管理音频焦点] 很多App都可以播放音频,因此在播放前如何获取到音频焦点就显得很重要了,这样可以避免同时出现多个声音,Android使用audio focus来节制音频的播放,仅仅是获取到audio focus的App才能够播放音频。 在App开始播放音频之前,它需要经过发出请求[request]->接受请求[receive]-&g...

mmdev 293

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android音乐播放器的音频焦点控制

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34327223的博客 358

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android4.4.4相机,极限优化修改版,做最好的原生相机

1、图库和相机分离,PNG减肥,精简体积约5MB 2、支持X86、ARM、MIPS内核处理器。 3、支持32位、64位处理器,不限品牌。 4、提升启动相机速度。 5、提升相机对焦速度。 6、降低摄像头闪烁频率,以降低发热量。 7、支持Android 4.0—4.4、Android L系统。 8、支持ART模式。 9、默认增加1%的HDR效果,提升弱光拍照效果。 10、降低jpg压

1360

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android学习进阶路线Android源码分享)

毕业8月有余,同时伴随着从事的Android经验的提升。仔细思量过去的工作内容,掐指算来也是少得可怜---主要维护FM收 音机模块,间或看看Lancher模块的代码。尽管这样,总的来说,在这八个月事件的学习里,我自我感觉收获还是很大的---自学了很多 Android相关方面的知识。虽然里真正的大牛还有很远的一段路程要走,自己也会坚持学习、坚持走下去。            再次,把自己学习

1198

[Android Training视频系列]2.2 Pausing and Resuming an Activity

1.主要内容 本讲介绍onPause和onResume,主要分析了在onPause函数中应该执行哪些操作。 2.视频讲解 http://www.eyeandroid.com/thread-11291-1-1.html 3.翻译参考 在正常的程序使用中,处于前台运行的activity有时会被另外一些可见的组件遮挡,从而造成activity被暂停。比如,一个半透明的activit

861

[Android Training视频系列]1.4 Starting Another Activity

1.主要内容 本小结在1.3节的基础上,继续完善代码,会书写Button响应事件,在响应事件中新建一个Intent去启动另外一个Activity。 2.视频讲解 http://www.eyeandroid.com/thread-11210-1-1.html 3.翻译参考 Respond to the Send Button-响应Send(发送)按钮 响应按钮

807

[Android Training视频系列]1.1 Creating an Android Project

1.主要内容 本小节介绍如何创建一个Android Project,分别从Eclipse和命令行的方式来创建了默认的Android Project 2.视频讲解 http://www.eyeandroid.com/thread-10472-1-1.html 3.翻译参考 1.使用Eclipse创建项目 2.使用命令行创建项目 创建安卓项目

713

[Android Training视频系列]2.3 Stopping and Restarting an Activity

1.主要内容 本小节介绍onStop与onRestart以及onStart的使用,通过本讲我们能学会应该在onStop与onStart里面执行什么样的操作。 2.观看视频讲解 http://www.eyeandroid.com/thread-11346-1-1.html 3.翻译参考 停止与重启Activity 在activity生命周期中,恰当的停止与重启ac

703

[Android Training视频系列]2.4 Recreating an Activity

1.主要内容 本讲讲解onSaveInstanceState与onRestoreInstanceState的使用。 2.视频讲解 http://www.eyeandroid.com/thread-11391-1-1.html 3.翻译参考 存在一些情况,由于普通的程序行为,你的activity会被销毁,比如,当用户点击Back按钮,或者自己调用finish()方法。另外,如果

700

[Android Training视频系列] 6.3 Saving Data in SQL Databases(保存数据到SQLite)

一 主要内容 1.概述 2.定义Schema与Contract 3.使用SQL Helper创建数据库 4.向数据库添加信息 5.从数据库中读取信息 6.删除数据库中的信息 7.更新数据库中的信息 二 翻译转载 对于重复或者结构化的数据(如联系人信息)等保存到DB是个不错的主意。这节课假定你已经熟悉SQL数据库的操作。在Android上可能会使用到的APIs,可以从a

698

[Android Training视频系列] 8.1 Controlling Your App’s Volume and Playback

主要内容: 1 鉴别使用的是哪个音频流 2 使用物理音量键控制应用程序的音量 3 使用物理播放控制键来控制应用程序的音频播放

681

[Android Training视频系列]2.1 Starting an Activity

1.主要内容  本小节首先对Activity的各个生命周期作简单介绍,然后介绍如何设置Main Activity,最后讲解创建和销毁Activity。 2.视频讲解 http://www.eyeandroid.com/thread-11253-1-1.html 3.翻译参考 启动Activity 与其他在应用程序中由main()函数作为开端不同,Andr

664
上一篇: [Android Training视频系列] 8.1 Controlling Your App’s Volume and Playback
下一篇: [Android Training视频系列] 8.3 Dealing with Audio Output Hardware
cofftech
博客等级 码龄16年 46粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值