1. 程式人生 > >Android 4.1.2開機音樂與動畫的程式碼

Android 4.1.2開機音樂與動畫的程式碼

本來在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();

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