標籤:work base volume XML default png type 分享 uri
在Android8.0的Sound Settings中可以看到調整音量分為三種:Media/Alarm/Ring
當使用者點擊設定時,設定的值範圍分別為:
Media 0--15,Alarm 0--7,Ring 0--7
布局檔案位於:packages/apps/Settings/res/xml/sound_settings.xml
實現檔案位於:packages/apps/Settings/src/com/android/settings/notification/SoundSettings.java
在VolumeSeekBarPreference.java中會為Media初始化點擊設定後要播放的sample音頻,而Alarm/Ring會在播放時去讀系統設定值。
final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;
繼續追下去可以看到真正設定聲音是在frameworks/base/core/java/android/preference/SeekBarVolumizer.java中
可以看到若如上設定了sample media的URI,就不會再去設定,反之就會去找系統的URI
if (defaultUri == null) { if (mStreamType == AudioManager.STREAM_RING) { defaultUri = Settings.System.DEFAULT_RINGTONE_URI; } else if (mStreamType == AudioManager.STREAM_NOTIFICATION) { defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI; } else { defaultUri = Settings.System.DEFAULT_ALARM_ALERT_URI; } }
真正設定系統音量的API如下:
mAudioManager.setStreamVolume(mStreamType, mLastProgress, AudioManager.FLAG_SHOW_UI_WARNINGS);
Android源碼開發筆記 -- Sound Settings 音量調整相關