Android 4.1.2開機音樂與動畫的程式碼
阿新 • • 發佈:2019-02-18
本來在android4.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\n"); if (mp->setDataSource(SYSTEM_BOOTMUSIC_FILE, NULL) == NO_ERROR) { printf("setDataSource audio\n"); mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE); mp->prepare(); mp->setLooping(true); } device = AudioSystem::getDevicesForStream(AUDIO_STREAM_ENFORCED_AUDIBLE); printf("device = %d\n", device); bool temp = AudioSystem::setStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, index, device); //printf("index = %d,temp = %d\n", index,temp); temp = AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index, device); //printf("index = %d,temp = %d\n", index,temp); if (index != 0){ //printf("index!=0\n"); mp->seekTo(0); mp->start(); } } //End
上面只是起到了播放音樂的作用,那麼要同步,只需要將程式碼中的
mp->start();
移至你需要播放音樂的位置即可。