之前搜按音量键调节音量的帖子,大部分写的都是在PhoneWindowManager.java里处理。实际跟踪发现并不是,记录下,方便以后查找。
VolumePreference.java
onKey
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (isdown) {
mSeekBarVolumizer.changeVolumeBy(-1);
}
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
if (isdown) {
mSeekBarVolumizer.changeVolumeBy(1);
}
return true;
SeekBarVolumizer.java
public void changeVolumeBy(int amount) {
mSeekBar.incrementProgressBy(amount); // 进度条变化
postSetVolume(mSeekBar.getProgress()); // 实际设置声音大小
postStartSample();
mVolumeBeforeMute = -1;
}
case MSG_SET_STREAM_VOLUME:
if (mMuted && mLastProgress > 0) {
mAudioManager.adjustStreamVolume(mStreamType, AudioManager.ADJUST_UNMUTE, 0);
} else if (!mMuted && mLastProgress == 0) {
mAudioManager.adjustStreamVolume(mStreamType, AudioManager.ADJUST_MUTE, 0);
}
mAudioManager.setStreamVolume(mStreamType, mLastProgress,
AudioManager.FLAG_SHOW_UI_WARNINGS);
break;
之后就进AudioService.java了,这个部分之后加详细步骤。
设置里调节音量条 流程基本一样
SeekBarVolumizer OnSeekBarChangeListener监听到进度条变化,
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
if (fromTouch) {
postSetVolume(progress);
}
if (mCallback != null) {
mCallback.onProgressChanged(seekBar, progress, fromTouch);
}
}
mCallback是设置VolumeSeekBarPreference.java init时注册的
final SeekBarVolumizer.Callback sbvc = new SeekBarVolumizer.Callback() {
@Override
public void onSampleStarting(SeekBarVolumizer sbv) {
if (mCallback != null) {
mCallback.onSampleStarting(sbv);
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
if (mCallback != null) {
mCallback.onStreamValueChanged(mStream, progress);
}
}
@Override
public void onMuted(boolean muted, boolean zenMuted) {
if (mMuted == muted && mZenMuted == zenMuted) return;
mMuted = muted;
mZenMuted = zenMuted;
updateIconView();
}
};