先熟悉下 音频设置的流程:
java层先check下streamvolumeindex
这样的话会用到 audiosystem.cpp中的getStreamVolumeIndex()
进而调用audiopolicyservice 接着就是调用audiopolicymanager
check完后,audiosystem.cpp开始setstreamvolume() 进入audiofling.cpp
设置进去。
那如果要添加一个音频的话,这几个类可定都有牵连
audiomanager是对外开放的入口,在这里添加音频类型,以供外部使用
public static final int STREAM_FM = AudioSystem.STREAM_FM;
public static final int[] DEFAULT_STREAM_VOLUME = new int[] {
4, // STREAM_VOICE_CALL
7, // STREAM_SYSTEM
4, // STREAM_RING
8, // STREAM_MUSIC
4, // STREAM_ALARM
4, // STREAM_NOTIFICATION
7, // STREAM_BLUETOOTH_SCO
7, // STREAM_SYSTEM_ENFORCED
11, // STREAM_DTMF
11, // STREAM_TTS
4, // STREAM_FM
};
当然AudioSystem里面也要添加。这个类就是一个公用的数据类定义一些数据常量。
public static final int STREAM_FM = 10;
private static final int NUM_STREAM_TYPES = 12;
/* These values must be kept in sync with AudioSystem.h */
看到这行注释,难道 .h里面也有设置还是以前的代码,已经调整代码了,但.h里面并没有关于这个的设置。
两个文件出了文件名一样外,我看不出有啥相同的地方。真实改改个明了,叫:audiountils.java更适合
还有一个无关紧要的地方就是 framwork 下面的settingprovider下面的settings.java 里面,添加上这个字符串
/**
* The mapping of stream type (integer) to its setting.
*/
public static final String[] VOLUME_SETTINGS = {
VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC,
VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO,"","","",VOLUME_FM,VOLUME_MATV
};
public static final String VOLUME_FM = "volume_fm";
这个类就是设置一些系统的默认值啥的。
还有个系统界面:volumepanel.java 就是系统调节音量的框
onShowVolumeChanged()里面添加:
case AudioManager.STREAM_FM: {
//这里你可以变幻icon或弹出提示等等,随你
break;
}
有的代码会在audioflinger文件夹下 添加 audio_custom_exp.h来初始化一些值
这一步不是必须的。
下面来添加 策略归属
在audioyusupolicymanager:getstrategy() 没有自定义就是在audiopolicymanagerbase下面吧
这个策略模式的添加就不说了,之前一篇关于音频策略的文章已经说了。
|