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();
}

更多相关文章

  1. Android实时获得经纬度,发送给c++服务端
  2. Android接口测试-JUnit入门
  3. android客户端从服务器端下载文件,服务端返回文件流(文件不在项目
  4. Android中上传图片到服务端C#接收图
  5. Android LCD(三):Samsung LCD接口篇
  6. android ScreenshotClient 接口截屏幕
  7. Android 无线接口层RIL(Radio Layer Interface)——RILD
  8. Android系统服务接口

随机推荐

  1. Android(安卓)jni系统变量、函数、接口定
  2. Android(安卓)应用的真正入口 - ZygoteIn
  3. Android使用ADB启动应用程序
  4. LinearLayout 内部控件居中
  5. 使用GDB调试Android(安卓)4.0中的WebKit
  6. 两分钟彻底让你明白Android(安卓)Activit
  7. android两种方式实现发送短信的功能代码
  8. Android动画设置interpolator插值器
  9. android google map apiKey 相关操作
  10. Android(安卓)进阶——Android(安卓)Stud