android定制化开关机动画、铃音

论坛 期权论坛     
选择匿名的用户   2021-6-2 16:38   478   0
<br> 系统通常默认支持开机动画,开机关机铃声服务倒是预先定义了,不过使用时需要在/sysytem/media/下添加相应的音频文件。长按Power键弹出关键选项,关机时也只是显示进度条,而不是我们期望的关机动画同时伴有关机铃声,当然在做二次开发的时候,这些都是可以定制的。下面将逐步分析如何实现这些定制化的需求。
<br>
<br>
<br> 一.    制作开机动画
<br>
<br>
<br> 开机画面是保存在/system/media的bootanimation.zip,下面分析系统开机画面的构成
<br> 文件名为bootanimation.zip 一定是这个不能修改,里面包含part1 part2文件夹 和desc.txt,part 文件夹里面放的是动画拆分的图片,格式为png, desc.txt里面是播放的设置。
<br> 格式是这样的
<br>
<br>
<br> 480 800 15
<br> p 1 0 part0
<br> p 0 0 part1
<br> 480 800是指显示的分辨率宽 高
<br> 15是一秒的帧数
<br> p后面的数字是指播放次数 0为循环,N为播放N次
<br> 后面那位数字一般为0(空指令), 表示播放一遍后稍作停顿的时间
<br> part0,part1 为文件夹名
<br> 一般我们只使用part0目录
<br>
<br>
<br> 图片准备好了,desc.txt里面的命令也准备好了,就可以把他们一起打包压缩成zip格式了。记住,是zip格式,而不是rar格式。另外压缩的时候注意一点,压缩的时候压缩方式要选择存储,否则开机时手机会不认的。当然不至于变砖,只是开机的时候会黑着没动画一直到进入桌面为止。
<br>
<br>
<br>  
<br>
<br>
<br> 开机动画的替换也很简单,我们把做好的bootanimation.zip替换掉原来的/system/media/bootanimation.zip文件即可。关机动画其实和开机动画的制作一样,我们命名为shutdownanimation.zip,和bootanimation.zip放在同一目录下。
<br>
<br>
<br>  
<br>
<br>
<br>  
<br>
<br>
<br>  
<br>
<br>
<br> 二. 开关机动画实现原理
<br>
<br>
<br> Android系统在init.rc中定义了很多Servic,具体定义格式可以参考《Android Platform Developer’s Guide》中的“Android Init Language”。Init.rc中定义的Service将会被Init进程创建,其中已经定义的服务就包含了开机动画,但没有关机动画的定义
<br>
<br>
<br> service bootsound /system/bin/mplayer /system/media/bootsound
<br>
<br>
<br>     user media
<br>
<br>
<br>     group audio
<br>
<br>
<br>     oneshot
<br>
<br>
<br> //开机铃声服务 /system/media/startupsound是铃声文件
<br>
<br>
<br> service startupsound /system/bin/mplayer /system/media/startupsound
<br>
<br>
<br>     user media
<br>
<br>
<br>     group audio
<br>
<br>
<br>     disabled
<br>
<br>
<br>     oneshot
<br>
<br>
<br> //关机铃声服务 /system/media/shutdownsound是关机铃声
<br>
<br>
<br> service shutdownsound /system/bin/mplayer /system/media/shutdownsound
<br>
<br>
<br>     user media
<br>
<br>
<br>     group audio
<br>
<br>
<br>     disabled
<br>
<br>
<br>     oneshot
<br>
<br>
<br> //定义了一个bootanim的服务,对应执行/system/bin/bootanimation
<br>
<br>
<br> //disabled 表示init进程创建只是创建它,但不立刻执行
<br>
<br>
<br> //oneshot 表示该服务只执行一次
<br>
<br>
<br> service bootanim /system/bin/bootanimation
<br>
<br>
<br>     user graphics
<br>
<br>
<br>     group graphics
<br>
<br>
<br>     disabled
<br>
<br>
<br> oneshot
<br>
<br>
<br>  
<br>
<br>
<br>  
<br>
<br>
<br> 当android系统boot时,开始加载动画和开机铃声,其代码位于
<br>
<br>
<br> //源文件SurfaceFlinger.cpp
<br>
<br>
<br> status_t SurfaceFlinger::readyToRun() {
<br>
<br>
<br>     
<br>
<br>
<br>     // start boot animation service
<br>
<br>
<br>     property_set(&#34;ctl.start&#34;, &#34;bootanim&#34;);//注
<br>
<br>
<br>     {
<br>
<br>
<br>         char value[PROPERTY_VALUE_MAX];
<br>
<br>
<br>         property_get(&#34;persist.sys.profile.silent&#34;, value, &#34;0&#34;);
<br>
<br>
<br>         if (atoi(value)&#61;&#61; 0){
<br>
<br>
<br>             LOGI(&#34;start:persist.sys.profile.silent is soundable&#34;);
<br>
<br>
<br>             // start startupsound service
<br>
<br>
<br>             property_set(&#34;ctl.start&#34;,&#34;startupsound&#34;);//注
<br>
<br>
<br>          } else {
<br>
<br>
<br>             LOGI(&#34;start:persist.sys.profile.silent is silent&#34;);
<br>
<br>
<br>          }
<br>
<br>
<br>     }
<br>
<br>
<br>     return NO_ERROR;
<br>
<br>
<br> }
<br>
<br>
<br>  
<br>
<br>
<br> 当Android完成boot后,关闭动画和开机铃声,代码位于
<br>
<br>
<br> //源文件SurfaceFlinger.cpp
<br>
<br>
<br> void SurfaceFlinger::bootFinished() {
<br>
<br>
<br>    const nsecs_t now &#61; systemTime();
<br>
<br>
<br>    const nsecs_t duration &#61; now - mBootTime;
<br>
<br>
<br>    LOGI(&#34;Boot is finished (%ld ms)&#34;, long(ns2ms(duration)) );
<br>
<br>
<br>    mBootFinished &#61; true;
<br>
<br>
<br>    //stop bootanim service
<br>
<br>
<br>    property_set(&#34;ctl.stop&#34;, &#34;bootanim&#34;);
<br>
<br>
<br>    char value[PROPERTY_VALUE
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP