Android的framework层是如何进行音量调整的

 我来答
文爷君玵浝冏
推荐于2016-01-14 · 超过66用户采纳过TA的回答
知道小有建树答主
回答量:119
采纳率:100%
帮助的人:65.7万
展开全部
因此,调整音量是通过AudioManager间接调用AudioService.adjustStreamVolume方法完成。
音量调整分为两步:先查看模式(Ring mode)是否需要调整,如果不需要调整模式,当前模式一定是正常模式(Normal mode),那就需要调整音量。
调整模式通过调用checkForRingerModeChange(oldIndex, direction);实现,调整音量通过调用streamState.adjustIndex(direction)实现。具体代码参考/framework/base/media/java/android/media/AudioService.java中的public void adjustStreamVolume(int streamType, int direction, int flags)方法。
该方法先检查模式是否需要调整,再进行音量调整。调整完毕后,做了两件事:
1、通过mVolumePanel.postVolumeChanged(streamType, flags);向用户显示改变结果。
2、通过sendVolumeUpdate(streamType);广播音量有改变的系统事件。
改变音量这个功能与用户界面有关的有两个部分,分别是/framework/base/core/java/android/view/VolumePanel.java和/framework/base/services/java/com/android/server/status/StatusBarPolicy.java。
VolumePanel主要负责向用户显示一个Toast,告诉用户目前的模式(Ring Mode)和音量大小。每次AudioService通过向post一系列Message给VolumePanel,来驱动Toast的显示。
StatusBarPolicy主要负责在静音模式(silent mode)和振动模式(vibrate mode)下在状态栏(status bar)的右方显示一个代表相应意义的图标。
系统启动后,StatusBarPolicy会注册一个Receiver,它可以接收很多种广播,其中就有AudioService在完成每一次的模式和音量更新时发出的两个广播事件AudioManager.RINGER_MODE_CHANGED_ACTION和AudioManager.VIBRATE_SETTING_CHANGED_ACTION。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式