Android的framework层是如何对铃声的音量进行调整的
2011-04-11 17:15
357 查看
了解老码农个人隐私,请看这里:http://www.koulianbing.com/?page_id=12
android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装。因此,调整铃声音量是通过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。
接收到这两个事件时,StatusBarPolicy就会调用updateVolume()来更新状态栏上的图标。
android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装。因此,调整铃声音量是通过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。
接收到这两个事件时,StatusBarPolicy就会调用updateVolume()来更新状态栏上的图标。
相关文章推荐
- Android的framework层是如何对铃声的音量进行调整的
- Android的framework层是如何对铃声的音量进行调整的
- RK Android的framework层是如何进行音量调整的
- 如何获取和设置android系统铃声和音量大小
- 如何获取和设置android系统铃声和音量大小
- 如何调整Android手机的开机音量大小
- Android开发_如何获取和设置android系统铃声和音量大小
- 5、xamarin.android 中如何对AndroidManifest.xml 进行配置和调整
- Android开发_如何获取和设置android系统铃声和音量大小
- 如何在Eclipse开发环境进行android应用调试
- Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入。 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少
- 如何用Fiddler对Android应用进行抓包
- Android应用如何进行数字签名与优化
- [置顶] Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示
- 如何把android中布局文件(.xml)与相关的类(.java)进行关联?
- 如何进行Android单元测试
- Android系统铃声音量监控(铃声、音量、静音、扬声器)
- Android入门 在ListView中如何进行精确的定位
- Android如何在应用层进行截屏及截屏源码分析(上)
- 如何进行Android单元测试