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

移至你需要播放音乐的位置即可。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/548ec4d99e2f311867c1e66c22c9b30f.html