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

从原理到实践:详解RGBD相机深度与彩色图像对齐(D2C)算法 本文深入解析了RGBD相机深度与彩色图像对齐(D2C)算法的原理与实现。针对自组装相机中深度图与彩色图不匹配的核心痛点,文章从相机模型、坐标系变换等数学基础讲起,剖析了传统点映射算法的缺陷,并重点介绍了高效的矩形区域映射算法。该算法通过将深度像素视为矩形区域进行映射,有效解决了空洞和遮挡问题,并附有可直接复用的C++代码与优化技巧,为三维重建、机器人视觉等应用奠定坚实基础。 阅读详情
主要内容:
1 鉴别使用的是哪个音频流
2 使用物理音量键控制应用程序的音量

3 使用物理播放控制键来控制应用程序的音频播放

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

控制应用程序的音量和音频的播放

       一个好的用户体验是可预期可控的。如果应用程序是在播放音频,那么显然我们需要做到能够通过硬件按钮、软件按钮、蓝牙耳麦等来控制音量。

       同样的,我们需要能够监听Media Button发出的播放、停止、暂停、跳过、上一首等动作,并且在应用程序所使用的Audio Stream上进行对应的响应。

       鉴别使用的是哪个音频流

       首先需要知道的是我们的应用程序会使用到哪些音频流。

       Android为播放音乐、闹铃、通知铃、来电声音、系统声音,打电话声音与DTMF频道分别维护了一个隔离的音频流。这是我们能够控制不同音频的前提。

       这些音频流中大多数都是被系统限制的,不能胡乱使用。除了你的应用程序是需要做替换闹铃操作,几乎其他的播放音频操作都是使用"STREAM_MUSIC"音频流。

       使用硬件音量键来控制应用程序的音量

       默认情况下,按下音量控制键会调节当前被激活的音频流,如果此时你的应用程序没有任何声音在播放,则会调节铃声的音量。

       如果你的应用程序是一个游戏或者音乐程序,需要在不管是否目前正在播放歌曲或者游戏是否发出声音,按硬件的音量键都会使其音量得到调节。

       我们需要监听音量键是否被按下,Android提供了setVolumeControlStream()的方法来直接控制指定的音频流的音量。

       在鉴别出应用程序会使用哪个音频流之后,需要在Activity或者Fragment的onCreate中就调用setVolumeControlStream,这样能确保不管应用程序是否可见,音频控制功能都以用户的预期工作。

setVolumeControlStream(AudioManager.STREAM_MUSIC);

       使用硬件的播放控制按键来控制应用程序音频播放

       媒体播放按钮,例如播放, 暂停, 停止, 跳过, 上一首等功能同样可以在一些线控,耳麦或者其他无线控制设备上实现。无论用户按下上面任何设备上的控制按钮,系统都会广播一个带有ACTION_MEDIA_BUTTON的Intent。

       为了响应那些操作,需要像下面一样注册一个BroadcastReceiver在Manifest文件中。     

<receiver android:name=".RemoteControlReceiver">

    <intent-filter>

        <action android:name="android.intent.action.MEDIA_BUTTON" />

    </intent-filter>

</receiver>

       Receiver需要判断这个广播是来自哪个按钮的操作,Intent在EXTRA_KEY_EVENT中包含了KEY信息,同样KeyEvent类包含了一系列KEYCODE_MEDIA_*的静态变量来表示不同的媒体按钮,例如KEYCODE_MEDIA_PLAY_PAUSE 和 KEYCODE_MEDIA_NEXT.

       下面的代码演示如何获取按下的媒体按键以及如何对应地响应:      

public class RemoteControlReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {

            KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);

            if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {

                // Handle key press.

            }

        }

    }

}

       因为可能有多个程序都同样监听了这些控制按钮,那么必须在代码中特意控制当前哪个Receiver会进行响应。

       下面的例子显示了如何使用AudioManager来注册监听与取消监听,通过这种方式,当Receiver被注册上时,它将是唯一响应Broadcast的Receiver。

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

...

// Start listening for button presses

am.registerMediaButtonEventReceiver(RemoteControlReceiver);

...

// Stop listening for button presses

am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);

       通常,当应用程序变得不活跃或者不可见时(像是在onStop())回调期间),应用程序应该取消注册大多数的Receiver。但是在媒体播放的时候并没有那么简单,因为我们需要在后台播放歌曲的时候同样能够进行响应。一个比较好的注册与取消监听的方法是当程序获取与失去音频焦点的时候进行操作,这个内容会在后面的课程中详细讲解。

NEU-DET 冷轧钢缺陷检测:基于 YOLOv8 的目标检测与可视化 UI 实现 冷轧钢的生产过程中,由于设备故障、工艺问题或者人为因素,钢板表面可能会出现多种缺陷,如划痕、裂纹、孔洞等,这些缺陷会严重影响钢材的质量。它比之前的版本(如 YOLOv5、YOLOv4)在速度和精度上都有显著提升,并且对硬件要求较低,适合进行工业界面和嵌入式系统的应用。这些版本相较于更大型的模型(如 YOLOv8x)具有更快的推理速度和较低的资源占用,适合工业生产线中的实时应用。通过将训练好的模型部署到工业生产线摄像头中,我们可以实现实时的缺陷检测,极大地提升生产效率和产品质量。 阅读详情

相关推荐

用Quartus II和LPM_ROM手把手复现西电计组课设:从微指令到五条指令的完整流程

本文详细介绍了使用Quartus II和LPM_ROM复现西电计组课设的完整流程,从微指令编写到五条指令的实现。通过环境搭建、LPM_ROM配置、微程序设计及调试技巧,帮助读者高效完成课程设计,避开常见问题。适合计组课程设计的学习者和实践者参考。

weixin_29288313的博客 458

Android 8.1 启动时间优化--耗时分析

之前分析各个部分耗时,都是通过分析log,在SecureCRT中设置时间戳,打印出如下log [ 22.266201] c1 [saudio] saudio_wait_monitor_cmd error -5 [ 22.266205] c1 sblock_receive:sblock-5-13 not ready! [ 22.266209] c1 [saudio] Error: sb...

u010783226的专栏 1282

STM32双ADC同步采样实战:FFT测量相位差的5个关键细节

本文深入探讨了利用STM32双ADC同步采样结合FFT算法精确测量信号相位差的实战技巧。文章聚焦五个关键细节:确保ADC时钟同源、优化DMA缓冲区设计、信号调理与窗函数选择、精确的相位提取与解缠绕,以及系统误差校准与验证。这些细节是提升相位差测量精度、确保系统稳定性的核心,尤其强调了STM32配置中易被忽视的时钟同步问题。

oauth7security的博客 596

Android性能优化系列之App启动优化

 https://www.jianshu.com/p/4f10c9a10ac9

qq_30723541的博客 290

abaqus wcm插件下载_Abaqus随机短纤维增强复合材料建模插件

文末附Abaqus随机短纤维增强复合材料建模插件下载链接前言短纤维增强复合材料相对于长纤维增强复合材料来说更容易制备,且短纤维的填充性能略有改善,可制造复杂产品,广泛应用于车辆、航空航天、建筑等行业,对短纤维增强复合材料进行细观力学分析,可对其宏观力学性能进行预测、分析破坏机理等。接下来对随机短纤维增强复合材料建模插件进行介绍。NO.1 【算法简介】难点一:此插件核心在于判断生成的纤维是...

weixin_39974882的博客 2833

UG\NX二次开发 分割曲线

分割曲线没有ufun函数?那就换一种思路实现。

王牌飞行员_里海的博客 1147

App启动优化心得

白日依山尽,黄河入海流。欲穷千里目,更上一层楼。唐·王之涣 《登黄鹤楼》

henkun的博客 1138

达梦数据库修改最大连接数

达梦数据库的最大连接数推荐配置与服务器内存有关。不应设置得过大,否则容易导致出现OOM。文件中整型的参数值。DSC环境下,除了特殊参数以外,其他参数值会在OK节点上同步。返回值:当前DM.INI文件中对应的参数值。功能说明:返回DM.INI文件中。:DM.INI文件中的参数名。

Sebastien23的博客 3336

Android bootchart 开机启动优化

环境ubuntu 14.04 + android 4.3 1. bootchart编译: bootchart 源代码位于:\system\core\init\bootchart.c,查看Android.mk: INIT_BOOTCHART := true ifeq ($(strip $(INIT_BOOTCHART)),true) LOCAL_SRC_FILES += bootchart.c L...

weixin_39694445的博客 614

YOLOv8改进:在C2F模块中引入RepGhost Bottleneck模块

C2F类是YOLOv8中的C2F模块的实现,它包含一个RepGhostBottleneck模块、一个卷积层和一个批归一化层。通过在C2F模块中引入RepGhost Bottleneck模块,我们可以在保持计算效率的同时提升模型的表达能力。这是因为RepGhost Bottleneck模块通过引入重复的卷积核来扩展模型的感受野,从而增加了模型对不同尺度目标的感知能力。RepGhost Bottleneck是一种用于卷积神经网络的改进模块,它可以在保持计算效率的同时提升模型的表达能力。希望以上内容对你有帮助!

IlgCrystal的博客 1307

【数据集】米级别热红外卫星合集:SDGSAT-1、HotSat-1等

米级别热红外卫星合集:SDGSAT-1、HotSat-1等

WW、forever的博客 1252

bootchart 使用说明及代码分析

bootchart是一个对linux启动流程进行分析得开源软件工具。android中有集成bootchart源码,路径为system/core/init/bootchart.c   先从具体使用流程如下: 1、编译android中的bootchart(缺省时不被编译)   在android源码system/core/init/目录执行: mm INIT_BOOTCHART=true

andyhuabing的专栏 1万+

学Simulink——基于Simulink的AUTOSAR架构下电机控制软件组件建模

本文详细介绍了在Simulink中基于AUTOSAR架构开发电机控制软件组件(SWC)的全流程。主要内容包括:首先阐述了AUTOSAR架构对汽车电子系统开发的价值,包括提高软件复用率、降低集成成本和改善验证环境。然后重点讲解了在Simulink中构建电机控制SWC的具体步骤:从创建AUTOSAR组件模型、定义数据端口和服务端口,到搭建FOC控制算法、配置运行实体,最后生成AUTOSAR描述文件和验证RTE接口。文章还提供了与基础软件(BSW)的集成方案、工程实践要点和常见问题解决方案,并以大众MEB平台等实

amy_mhd的博客 68

Android性能优化第(八)篇---App启动速度优化上

应用的启动速度缓慢这是很多开发者都遇到的一个问题,比如启动缓慢导致的黑屏,白屏问题,大部分的答案都是做一个透明的主题,或者是做一个Splash界面,但是这并没有从根本上解决这个问题。那么如何从根本上解决这个问题或者做到一定程度的缓解?一、应用的启动方式1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会首先会创建一个新的进程分配给该应用,这种启动方式就是冷启动。2、热启动:当启动应用时,后台已

Looper景 7419

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

kernel启动优化

 由于老衲最近在做车载linux kernel优化,特别是对启动时间的优化,从一开始的漫无目的,到现在的算是了解的过程,下了很大功夫。 特别是优化到最后2s以内,每10ms的优化太让人吐血了。杂话不多说,开整。 工欲善其事,必先利其器。 要调整启动时间,肯定得需要一个比较精确的时间戳,常用的有直接在kernel的menuconfig中选中printk_time,这样每条log前面都会打

liwei405499的专栏 1899

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android app启动耗时分析

最近在看下面这个case:双击锁屏界面“未读信息”,手指离开屏幕的前一帧开始计时,至页面跳转到信息页面完全展示结束. 为何9.0版本耗时比8.1版本要多些.多是调度问题导致的.我擦.哈哈. 本文的目的是理清楚app从点击到完全展示页面耗时是怎么测量或者说衡量的标准是什么? 以前没仔细研究过.下面记录打卡下. 通过systrace来定义: 查找出用户点击屏幕开始的点,可以看touch的irq中断...

悟空明镜 1567

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android烧录程序后第一次开机时间优化

为了提高烧录程序后第一次开机速度,我们可以采用如下方法:在device/qcom/msm8909/BoardConfig.mk中追加WITH_DEXPREOPT:=true语句,将将jar包名通过TARGET_ADDITIONAL_BOOTCLASSPATH加入到 DEXPREOPT_BOOT_JARS,将jar预编译成odex,优化系统启动速度。

莹波&微步 1534

性能分析工具 — bootchart 工具使用(android 8.1)

111

岁月斑驳7的博客 1万+

Android性能优化(一)之启动加速35%

一、前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我将开启一个Android应用性能优化的专题,从理论到实战,从入门到深挖,手把手将性能优化实践到项目中,欢迎持续关注! 那么第一篇文章我就从应用的启动优化开始,根据实际案例,打造闪电般的App启动速度。 二、初识启动加速 来看一下Google官方文档《Launch-Time Perfor...

weixin_34194551的博客 481

Android开机时间慢问题调试小技巧

adb shell cat /proc/bootprof 会把各部分用的时间打出来 然后根据时间看是慢在哪个地方,根据log逐步分析即可

大燎原 1663

Android8.0以上版本差异性

Android8.1与之前的差异 1、String.getBytes(“Unicode”)(针对Google手机8.1系统) 在版本8.1之前,返回的byte[] 是低位在前,高位在后,8.1后直接变成了高位在前,低位在后 解决办法: 改成String.getBytes(“UnicodeLittleUnmarked”) 注意: 原来的getBytes(“Unicod...

Litchiny的博客 6382

Android适配8.0遇到的一些坑

 安卓的搬运工 关注2018.05.10 17:11* 字数 733 阅读 918评论 0喜欢 1最近发现公司项目在华为应用市场直接提示不兼容8.0,想来8.0以后确实没有对项目进行响应适配升级,所以就大致整了下,首先必须的把SdkVersion提升到26把,然后google了一圈。大致google+百度了一大圈,基本锁定会导致程序异常+功能失效的几个点。①:通知(会收不到通知)②:悬浮窗(7.0...

oneblue123的博客 1805
上一篇: [Android Training视频系列] 6.3 Saving Data in SQL Databases(保存数据到SQLite)
下一篇: [Android Training视频系列] 8.2 Managing Audio Focus
cofftech
博客等级 码龄16年 46粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值