Android4.0.3修改启动动画和开机声音[转载]

来源:互联网 发布:易控王监控软件 编辑:程序博客网 时间:2024/05/17 07:56

1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片);  

2. Android平台启动初始化,出现"A N D R I O D"文字字样画面;

3. Android平台图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。
  现在我们说的是第三种方式(基于模拟器):
  android开机动画叫源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip或/system/media/bootanimation.zip里面的png图片以动画的形式播放出来。
  首先,我们先来分析一下源码:
  frameworks/base/cmds/bootanimation/BootAnimation.cpp
  首先看一下定义的常量:#define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"
  #define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"
  #define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"
  BootAnimation::readyToRun()
  进入一个if判断语句if ((encryptedAnimation &&
  (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) == 0) &&
  (mZip.open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) == NO_ERROR)) ||
  ((access(USER_BOOTANIMATION_FILE, R_OK) == 0) &&
  (mZip.open(USER_BOOTANIMATION_FILE) == NO_ERROR)) ||
  ((access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0) &&
  (mZip.open(SYSTEM_BOOTANIMATION_FILE) == NO_ERROR))) {
  mAndroidAnimation = false;
  }
  BootAnimation::threadLoop()if (mAndroidAnimation) {
  r = Android(); // 执行android字体闪动的图片
  } else {
  r = movie(); // 执行bootanimation.zip中提供的动画图片
  }
  ==> BootAnimation::Android()会加载"images/android-logo-mask.png"和"images/android-logo-shine.png"
  ==> BootAnimation::movie()会加载bootanimation.zip中的内容
  我们下载的源码里默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画面
  所以如果你系那个用.zip的动画那么把你做好的动画拷贝到编译好对应的目录下即可,然后执行make snod整合进img包就可以看到效果了
  如果你想修改android闪动的那两张图片的话,最简单的方法是直接替换图片,如果你懂openGL的话也可以自己做酷炫的动画
  那两张图片放在./frameworks/base/core/res/assets/images 目录下,一张镂空的android图,一张发光效果,动画效果就是下面那张发光的效果图不断左右移动。
  我是用Photoshop直接修改的
  修改完后直接替换,然后再 mmm frameworks/base , make snod 即可
  以下是我修改后的效果图:
[img][/img]
  看样子还想那么回事
  接下来我们给系统添加开机声音
  由于动画是在BootAnimation播放的,所以我们的声音肯定也在这个类中做,照猫画虎
  首先在BootAnimation.h添加方法的声明和头文件的引用#include
  #include
[img][/img]
  添加方法 void bootMusic();
[img][/img]
  然后在BootAnimation.cpp中实现这个方法: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();
  }
  }
  请注意这个目录setDataSource("/system/etc/poweron.wav", NULL)