《深入理解Android:卷III A》一一3.1概述

简介:

本节书摘来华章计算机出版社《深入理解Android:卷III A》一书中的第3章,第3.1节,作者:张大伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。1

3.1概述

通过对卷I第7章的学习,相信大家已经对AudioTrack、AudioRecord、音频设备路由等知识有了深入了解。这一章将详细介绍音频系统在Java层的实现,围绕AudioService这个系统服务深入探讨在Android SDK 中看到的音频相关的机制的实现。
在分析Android音频系统时,习惯将其实现分为两个部分:数据流和策略。数据流描述了音频数据从数据源流向目的地的过程。而策略则是管理及控制数据流的路径与呈现的过程。在卷I所探讨的Native 层音频系统中,AudioTrack、AudioRecord和AudioFlinger可以划归到数据流的范畴去讨论,而AudioPolicy相关的内容则属于策略范畴。
音频系统在Java层中基本上是不参与数据流的。虽然有AudioTrack和AudioRecord这两个类,但是它们只是Native层同名类的Java封装。抛开这两个类,AudioService这个系统服务包含或使用了几乎所有与音频相关的内容,所以说AudioService是一个音频系统的大本营,它的功能非常多,而且它们之间的耦合性也不大。本章将从三个方面来探讨AudioService。
音量管理。
从按下音量键到弹出音量调节提示框的过程,以及静音功能的工作原理。
音频IO设备的管理。
我们将详细探讨从插入耳机到声音经由耳机发出这个过程中,AudioService的工作内容。
AudioFocus机制。
AudioService在Android 2.3及以后版本中提供了AudioFocus机制,用以结束多个音频应用混乱的交互现状。音频应用在播放音频的过程中需要合理地申请与释放AudioFocus,并且根据AudioFocus所有权的变化来调整自己的播放行为。我们将从音频应用开始播放音频,到播放完成的过程中探讨AudioFocus的作用及原理。
AudioService的类图如图3-1所示。

图 3-1AudioService的类图
由图3-1可知:
AudioService继承自IAudioService.Stub。IAudioService.Stub类是通过IAudioService.aidl自动生成的。AudioService位于Bn端。
AudioManager拥有AudioService的Bp端,是AudioService在客户端的一个代理。几乎所有客户端对AudioManager进行的请求,最终都会交由AudioService实现。
AudioService的功能实现依赖AudioSystem类。AudioSystem无法实例化,它是Java层到native层的代理。AudioService将通过它与AudioPolicyService及AudioFlinger进行交互。
下面开始我们的AudioService之旅吧。

相关文章
|
18天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
91 0