按键音分析
触摸按键音流程
前面简要的流程我们就不分析了,画了一下简要的流程图,由于我分析的源码具有特殊性,分为两条线路来看
第一部分
客制化实现按键音部分,也就是意味着加载资源和播放按键音是单独实现的。实际上是走外部音源调音的这条线路
第二部分
原生的按键音流程,后面会挑一些比较关键的流程分析记录一下
AudioService.java
我们看主要看下AudioService.java中的的流程
/** @see AudioManager#playSoundEffect(int, float) */
public void playSoundEffectVolume(int effectType, float volume) {
if (mUseDspEffect) {
final IAudioPolicyCallback extVolCtlr;
synchronized (mExtVolumeControllerLock) {
extVolCtlr = mExtVolumeController;
}
if(extVolCtlr != null) {
//MSG_NOTIFY_VOL_EVENT会发送到外部路由策略端(该部分实际是用于调节音量的流程)
sendMsg(mAudioHandler, MSG_NOTIFY_VOL_EVENT, SENDMSG_QUEUE,
AudioManager.ADJUST_PLAY_EFFECT + effectType, 0 /*ignored*/,
extVolCtlr, 0 /*delay*/);
}else{d
Log.e(TAG, "AudioService playSoundEffectVolume failed for no ext Volume Controller found!");
}
return;
}
// do not try to play the sound effect if the system stream is muted
if (isStreamMutedByRingerOrZenMode(STREAM_SYSTEM)) {