首页 / 操作系统 / Linux / Android 4.1.2开机音乐与动画的代码
本来在Android 4.0.4中使用libmedia的时候采用了如下方式: #define SYSTEM_BOOTMUSIC_FILE "/system/media/sound.ogg"
int index;
MediaPlayer* mp = new MediaPlayer();
if((access(SYSTEM_BOOTMUSIC_FILE,F_OK))!=-1){
if (mp->setDataSource(SYSTEM_BOOTMUSIC_FILE, NULL) == NO_ERROR) {
mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
mp->prepare();
mp->setLooping(true);
}
AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index);
if (index != 0) {
mp->seekTo(0);
mp->start();
}
} 这段代码在4.0.4是可以用的,但到了4.1.2的时候发现getStreamVolumeIndex的接口发生了变化该函数位于frameworks/av/media/Libmedia/AudioSystem.cpp文件内函数原型为:status_t AudioSystem::getStreamVolumeIndex(audio_stream_type_t stream,
int *index,
audio_devices_t device)所以需要修改为如下代码:(由于开机的时候声音为最小,所以这里重新设置了下device的声音大小) #define SYSTEM_BOOTMUSIC_FILE "/system/media/sound.ogg"
//Neo Modify
int index = 5;
audio_devices_t device;
MediaPlayer* mp = new MediaPlayer();
if((access(SYSTEM_BOOTMUSIC_FILE,F_OK))!=-1){
//printf("access audio
");
if (mp->setDataSource(SYSTEM_BOOTMUSIC_FILE, NULL) == NO_ERROR) {
printf("setDataSource audio
");
mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
mp->prepare();
mp->setLooping(true);
}
device = AudioSystem::getDevicesForStream(AUDIO_STREAM_ENFORCED_AUDIBLE);
printf("device = %d
", device);
bool temp = AudioSystem::setStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, index, device);
//printf("index = %d,temp = %d
", index,temp);
temp = AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index, device);
//printf("index = %d,temp = %d
", index,temp);
if (index != 0){
//printf("index!=0
");
mp->seekTo(0);
mp->start();
}
}
//End上面只是起到了播放音乐的作用,那么要同步,只需要将代码中的mp->start();移至你需要播放音乐的位置即可。更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11