Android开机动画叫源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip或/system/media/bootanimation.zip里面的png图片以动画的形式播放出来,这段代码不支持音乐播放的,添加几段代码就能达到开机显示动画的时候播放音乐的效果了。
添加如下代码:
1.添加所需要的音频库头文件。在frameworks/base/cmds/bootanimation/BootAnimation.h添加
- #include <media/AudioSystem.h>
- #include <media/mediaplayer.h>
#include <media/AudioSystem.h>
#include <media/mediaplayer.h>
2.在frameworks/base/cmds/bootanimation/BootAnimation.h中添加public方法:
起名为bootMusic(),形式如下:
- class BootAnimation : public Thread, public IBinder::DeathRecipient
- {
- public:
- BootAnimation();
- virtual ~BootAnimation();
- sp<SurfaceComposerClient> session() const;
- void bootMusic();
class BootAnimation : public Thread, public IBinder::DeathRecipient
{
public:
BootAnimation();
virtual ~BootAnimation();
sp<SurfaceComposerClient> session() const;
void bootMusic();
3.在frameworks/base/cmds/bootanimation/BootAnimation.cpp中添加bootMusic的实现方法:
- void BootAnimation::bootMusic()
- {
- int index;
- MediaPlayer* mp = new MediaPlayer();
- if (mp->setDataSource("/system/etc/poweron.wav", NULL) == NO_ERROR) {
- mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
- mp->prepare();
- }
- AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index);
- if (index != 0) {
- mp->seekTo(0);
- mp->start();
- }
- }
void BootAnimation::bootMusic()
{
int index;
MediaPlayer* mp = new MediaPlayer();
if (mp->setDataSource("/system/etc/poweron.wav", NULL) == NO_ERROR) {
mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
mp->prepare();
}
AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index);
if (index != 0) {
mp->seekTo(0);
mp->start();
}
}
4.在frameworks/base/cmds/bootanimation/bootanimation_main.cpp中
在sp<BootAnimation> boot = new BootAnimation();与 IPCThreadState::self()->joinThreadPool();之间添加如下代码:
- sp<BootAnimation> boot = new BootAnimation();
- BootAnimation *animation = new BootAnimation();
- animation->bootMusic();
- IPCThreadState::self()->joinThreadPool();
sp<BootAnimation> boot = new BootAnimation();
BootAnimation *animation = new BootAnimation();
animation->bootMusic();
IPCThreadState::self()->joinThreadPool();
5.修改frameworks/base/cmds/bootanimation/Android.mk
在LOCAL_SHARED_LIBRARIES字段中添加libmedia共享库,最后的形式如下:
- LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libbinder \
- libui \
- libskia \
- libEGL \
- libGLESv1_CM \
- libgui\
- libmedia
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libui \
libskia \
libEGL \
libGLESv1_CM \
libgui\
libmedia
最后编译:mmm frameworks/base/cmds/bootanimation/
将生成的bootanimation push进去,命令:adb push out/target/product/ventana/system/bin/bootanimation /system/bin/
同时将名字为poweron.wav的音频格式push到/system/etc/下 。
进入adb shell可以测试一下效果,在命令行上敲bootanimation命令即可。