Android音量调节

xiaoxiao2021-02-28  81

原址

1.AudioManager的API frameworks/base/media/Java/Android/media/AudioManager.java public void handleKeyDown(){   adjustSuggestedStreamVolume(); }

public void adjustSuggestedStreamVolume(){   service.adjustSuggestedStreamVolume(); }

2.AudioService调用 frameworks/base/media/java/android/media/AudioService.java public void adjustSuggestedStreamVolume(){   adjustStreamVolume(streamType, direction, flags, callingPackage); }

public void adjustStreamVolume(){    }

public void handleMessage(){   case MSG_SET_DEVICE_VOLUME:     setDeviceVolume(); }

private void setDeviceVolume(){   mStreamStates[streamType].applyDeviceVolume(device); }

public void applyDeviceVolume(){   AudioSystem.setStreamVolumeIndex(mStreamType, index, device); }

3.调用AudioSystem接口 frameworks/base/media/java/android/media/AudioSystem.java public static native int setStreamVolumeIndex();

frameworks/av/media/libmedia/AudioSystem.cpp status_t AudioSystem::setStreamVolumeIndex(){   return aps->setStreamVolumeIndex(); }

4.服务端 frameworks/av/services/audioflinger/AudioPolicyService.cpp status_t AudioPolicyService::setStreamVolumeIndex(){   return mpAudioPolicy->set_stream_volume_index(); }

hardware/libhardware_legacy/audio/audio_policy_hal.cpp static int ap_set_stream_volume_index(){   return lap->apm->setStreamVolumeIndex(); }

hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp status_t AudioPolicyManagerBase::setStreamVolumeIndex(){   checkAndSetVolume(); }

status_t AudioPolicyManagerBase::checkAndSetVolume(){   float volume = computeVolume();   mpClientInterface->setStreamVolume(); }

hardware/libhardware_legacy/audio/AudioPolicyCompatClient.cpp void AudioPolicyCompatClient::setStreamVolume(){   return mServiceOps->set_stream_volume(); }

frameworks/av/services/audioflinger/AudioPolicyService.cpp static int aps_set_stream_volume(){   return audioPolicyService->setStreamVolume(); }

int AudioPolicyService::setStreamVolume(){   return (int)mAudioCommandThread->volumeCommand(); }

bool AudioPolicyService::AudioCommandThread::threadLoop(){   case SET_VOLUME:{     AudioSystem::setStreamVolume();   } }

frameworks/av/media/libmedia/AudioSystem.cpp status_t AudioSystem::setStreamVolume(){   af->setStreamVolume(); }

frameworks/av/services/audioflinger/AudioFlinger.cpp status_t AudioFlinger::setStreamVolume(){   mPlaybackThreads.valueAt(i)->setStreamVolume(); }

转载请注明原文地址: https://www.6miu.com/read-57475.html

最新回复(0)