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

文章详细解释了Android系统在启动过程中如何通过systemproperties控制开机和关机动画服务的启动与停止,以及ctl.start和ctl.stop属性的作用。还提到如何利用bootanimation服务实现动画的重复利用。
摘要由CSDN通过智能技术生成
oneshot

//开机铃声服务 /system/media/startupsound是铃声文件

service startupsound /system/bin/mplayer /system/media/startupsound

user media



group audio



disabled



oneshot

//关机铃声服务 /system/media/shutdownsound是关机铃声

service shutdownsound /system/bin/mplayer /system/media/shutdownsound

user media



group audio



disabled



oneshot

//定义了一个bootanim的服务,对应执行/system/bin/bootanimation

//disabled 表示init进程创建只是创建它,但不立刻执行

//oneshot 表示该服务只执行一次

service bootanim /system/bin/bootanimation

user graphics



group graphics



disabled

oneshot




当android系统boot时,开始加载动画和开机铃声,其代码位于



//源文件SurfaceFlinger.cpp

status_t SurfaceFlinger::readyToRun() {

// start boot animation service

property\_set("ctl.start", "bootanim");//注

{



    char value\[PROPERTY\_VALUE\_MAX\];



    property\_get("persist.sys.profile.silent", value, "0");



    if (atoi(value)== 0){



        LOGI("start:persist.sys.profile.silent is soundable");



        // start startupsound service

        property\_set("ctl.start","startupsound");//注

     } else {



        LOGI("start:persist.sys.profile.silent is silent");



     }



}



return NO\_ERROR;

}

当Android完成boot后,关闭动画和开机铃声,代码位于

//源文件SurfaceFlinger.cpp

void SurfaceFlinger::bootFinished() {

const nsecs_t now = systemTime();

const nsecs_t duration = now - mBootTime;

LOGI(“Boot is finished (%ld ms)”, long(ns2ms(duration)) );

mBootFinished = true;

//stop bootanim service

property_set(“ctl.stop”, “bootanim”);

char value[PROPERTY_VALUE_MAX];

property_get(“persist.sys.profile.silent”, value, “0”);

if (atoi(value)== 0){

   LOGI("stop:persist.sys.profile.silent is soundable");



   //stop startupsound service

   property\_set("ctl.stop","startupsound");

} else {

   LOGI("stop:persist.sys.profile.silent is silent");

}

}




如何理解ctr.start和ctr.stop系统属性?  

  

每一项服务必须在/init.rc中定义.Android系统启动时,init守护进程将解析init.rc和启动属性服务,属性“  

ctl.start ”和“ ctl.stop ”是用来启动和停止服务的。一旦收到设置“ ctrl.start  

”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中  

。客户端应用程序可以轮询那个属性值,以确定结果。想更深入了解Android property系统可以参考博文《(翻译)Android属性系统》。  

property\_set("ctl.start",ServiceName);就是启动ServiceName服务(在init.rc中定义);  

  

property\_set("ctl.stop",ServiceName)相对的是关闭ServiceName服务。  

  

A启动动画服务  

  

由于开机动画和关机动画除了播放的动画文件不同,其他的完全一致,这里重复利用/system/bin/bootanimation代码,  

仿照开机动画服务,我们新定义关机动画



service shutdownanim /system/bin/bootanimation -shutdown

user graphics

group graphics

disabled

oneshot



唯一要注意的是关机动画使用的/system/bin/bootanimation带了-shutdown参数,这个参数用来区分加载的动画文件为开机还是关机动画。当bootanimation服务启动时,进入/frameworks/base/cmds/bootanimation/bootanimation\_main.cpp主函数main



int main(int argc, char** argv)

{

总结

作为一名从事Android的开发者,很多人最近都在和我吐槽Android是不是快要凉了?而在我看来这正是市场成熟的表现,所有的市场都是温水煮青蛙,永远会淘汰掉不愿意学习改变,安于现状的那批人,希望所有的人能在大浪淘沙中留下来,因为对于市场的逐渐成熟,平凡并不是我们唯一的答案!

资料.png
资料图.jpg

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Jx-1714201768760)]
[外链图片转存中…(img-xIRUDma1-1714201768761)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值