日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 音量键 广播,【Android 7.0 Audio】: 按键调节音量的调用过程

發布時間:2023/12/2 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 音量键 广播,【Android 7.0 Audio】: 按键调节音量的调用过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自http://blog..net/xiashaohua/article/details/53842337

只簡單描述調用過程,需對照代碼看,不畫圖了,也不貼代碼)

1.在key Event處理部分,Phonewindow會捕獲到音量按鍵事件,

Phonewindow.onkeydown--MediaSessionLegacyHelper.getHelper(getContext()).sendAdjustVolumeBy

2.調節音量的時候要處理3件事情,界面顯示、播放提示音、調節音量,

MediaSessionManager. dispatchAdjustVolume--mService.dispatchAdjustVolume/binder-- MediaSessionService. dispatchAdjustVolume—dispatchAdjustVolumeLocked--mAudioService.adjustSuggestedStreamVolume

(如使用AudioManager,則AudioManager 的handleKeyDown、handleKeyUp也可來設置音量。

handleKeyDown--adjustSuggestedStreamVolume--MediaSessionLegacyHelper.sendAdjustVolumeBy—

)

3.在Audio模塊,

mAudioService.adjustSuggestedStreamVolume(direction,suggestedStream,

flags, packageName, TAG);/binder– AudioService.adjustSuggestedStreamVolume—adjustStreamVolume/這里做了些場景處理和判斷,將APS的工作提前做了,之后,

a)調音量,走??????????? --sendMsg(mAudioHandler,

MSG_SET_DEVICE_VOLUME,

SENDMSG_QUEUE,

device,

0,

streamState,

0);-- setDeviceVolume--mStreamStates[streamType].applyDeviceVolume_syncVSS(streamDevice)-- AudioSystem.setStreamVolumeIndex/jni-- AudioSystem.setStreamVolumeIndex--

aps->setStreamVolumeIndex(stream, index, device)/binder-- AudioPolicyInterfaceImpl.cppsetStreamVolumeIndex-- mAudioPolicyManager->setStreamVolumeIndex—checkAndSetVolume—

調一般的音量調用outputDesc->setVolume,待后面打開output

調節音量使用,調正在播放的鈴聲音量不在這個地方。

調通話中音量走mpClientInterface->setVoiceVolume-- AudioPolicyService::AudioPolicyClient::setVoiceVolume-- mAudioPolicyService->setVoiceVolume -- AudioPolicyService::setVoiceVolume -- mAudioCommandThread->voiceVolumeCommand/SET_VOICE_VOLUME

-- AudioSystem::setVoiceVolume -- af->setVoiceVolume -- dev->set_voice_volume--audio_hw.c adev_set_voice_volume-- voice_set_volume-- …

這個調音量的流程也是夠夠的了,從jni下來后,AS—APS—APM—APS—AS—AF—HAL這樣走了一大圈。

b)調界面,走 —sendVolumeUpdate-- mVolumeController.postVolumeChanged(streamType,flags);-- mController.volumeChanged/binder--

VolumeDialogController. volumeChanged-- mWorker.obtainMessage(W.VOLUME_CHANGED, streamType,flags).sendToTarget();--onVolumeChangedW--…

4.對于通過outPut設置音量的部分,如果是deepbuffer播放就不會調用下來,如果是offload播放,在audio_hw.c里面

static intout_set_volume(struct audio_stream_out *stream, float left,

float right)

out->stream.set_volume = out_set_volume;

在audioflinger里面就調整了

Threads.cpp(frameworks\av\services\audioflinger):???????????if (mOutput->stream->set_volume) {

Threads.cpp (frameworks\av\services\audioflinger):???????????????mOutput->stream->set_volume(mOutput->stream, left, right);

5.在audio_hw.c里面,流程如下,

out_set_volume--passthru.caudio_extn_passthru_set_volume--platform.c platform_set_device_params

0

總結

以上是生活随笔為你收集整理的android 音量键 广播,【Android 7.0 Audio】: 按键调节音量的调用过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。