Android 按音量键调节音量流程

之前搜按音量键调节音量的帖子,大部分写的都是在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();
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值