歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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\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();

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

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved