天天看点

android添加开机声音

涉及文件:

frameworks/base/cmds/bootanimation/bootanimation.h

frameworks/base/cmds/bootanimation/bootanimation.cpp

frameworks/base/cmds/bootanimation/bootanimation_main.cpp

frameworks/base/cmds/bootanimation/Android.mk

另外要准备一个wav格式的开机音乐文件(时间不要太长了)

在bootanimation.h文件中增加如下代码:

class BootAnimation : public Thread, public IBinder::DeathRecipient

{

public:

                BootAnimation();

    virtual     ~BootAnimation();

    void bootMusic();  //Xandy 2013/03/22  [email protected]

    sp<SurfaceComposerClient> session() const;

.

.

.

在bootanimation.cpp中增加相应的实现方法

void BootAnimation::bootMusic()

{

int index;

MediaPlayer* mp = new MediaPlayer();

if (mp->setDataSource("/system/media/audio/ui/boot.wav", NULL) == NO_ERROR) 

{

mp->setAudioStreamType(AudioSystem::ENFORCED_AUDIBLE);

mp->prepare();

}

AudioSystem::getStreamVolumeIndex(AudioSystem::ENFORCED_AUDIBLE, &index);

if (index != 0) 

{

mp->seekTo(0);

mp->start();

}

}

注意:这里我将开机音乐文件copy到了/system/media/audio/ui/boot.wav这个目录下面,可以在相应的vendor目录下面的AndroidBoard.mk里增加如下脚本代码:

# Bootsound

PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/boot.wav:system/media/audio/ui/boot.wav

有了相应的实现方法和音乐文件,下面要在某个地方调用到我们实现的方法,这里调用的地方紧跟bootanimation调用的地方,在bootanimation_main.cpp里:

增加红色部分代码:

int main(int argc, char** argv)

{

#if defined(HAVE_PTHREADS)

    setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY);

#endif

    char value[PROPERTY_VALUE_MAX];

    property_get("debug.sf.nobootanimation", value, "0");

    int noBootAnimation = atoi(value);

    LOGI_IF(noBootAnimation,  "boot animation disabled");

    if (!noBootAnimation) {

        sp<ProcessState> proc(ProcessState::self());

        ProcessState::self()->startThreadPool();

        // create the boot animation object

        sp<BootAnimation> boot = new BootAnimation();

//play boot boot music -Xandy

BootAnimation *animation = new BootAnimation();

        animation->bootMusic();

        IPCThreadState::self()->joinThreadPool();

    }

    return 0;

}

在bootanimation的Android.mk文件中加入音乐播放需要的shared libs

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

    libui \

libskia \

    libEGL \

    libGLESv1_CM \

    libsurfaceflinger_client \

    libmedia

最后终端进入到frameworks/base/cmds/bootanimation/目录,运行mm 将会模块编译出相应的bootanimation bin文件!

提一句:

喜欢DIY的朋友可以把这个文件copy出来,找一首自己喜欢的开机音乐,按照上面所说的音乐存放目录把开机音乐放入自己的手机中,并把所得的bootanimation这个bin替换掉自己手机/system/bin目录下的bootanimation文件(之前一定要先备份原来的bootanimation,不然出了问题,我不负责啊!!),并把这个文件的权限设置成777

可以adb shell下面分别运行如下命令:

su

chmod 777 /system/bin/bootanimation

开机音乐存放目录:/system/media/audio/ui/boot.wav    

音乐文件名只能是boot.wav!!!!

下面提供本人编译出来的bootanimation文件,下载地址:

http://download.csdn.net/detail/xl19862005/5170507