逆战安卓手机开关机动画画有吗?有安卓版的吗?

三星 Galaxy note 4开关机动画制作替换教程_安软市场
安卓软件全免费 绿色安全有保障
手机访问 下载快更省流量||
关注安软微信
微信号:anruan666
使用微信「扫一扫」扫描二维码
>三星 Galaxy note 4开关机动画制作替换教程
三星 Galaxy note 4开关机动画制作替换教程
11:19&&来源:安软市场&&编辑:JuyGemini&&浏览:8750&&
  很多使用三星GalaxyNote 4的同学肯定都想给自己的手机换一个开关机动画,那么三星的的开机动画跟一些通用教程的修改方法其实也是一样的,唯一不同的是三星的开关机动画格式与一般的手机不一样,那要怎么办呢?大家别捉急,小编马上就来告诉大家如何制作三星Galaxy Note 4开关机动画教程。保证让你的开关机变为独一无二的存在。
&&& &&& 三星GalaxyNote 4制作开关机动画教程:
  第一:下载自行安装,怎么安装这里忽略!
  第二:三星开关机动画具体文件路径在:system/media/bootsamsung.qmg bootsamsungloop.qmg【这两个是开机动画】;system/media/shutdown.qmg 或system/media/video/shutdown/shutdown.qmg【这是关机动画】;开关机动画皆由 system/bin/bootanimation 所控制,当然这个不是这里所说的。
  第三:准备好两组动画,一组为:【bootsamsung.qmg】& & 这是单循环开机动画;一组为:【bootsamsungloop.qmg】& & 这是反复循环开机动画;动画图片格式为:【JPG】与【PNG】图片的大小为:竖屏,分辨率比例 9∶16,图片数量最好控制在 100 张以内;
  第四:点击打开:Samsung Theme D先开始制作开机动画的 bootsamsung.qmg 部分;
  【步骤一】
  【步骤二】
  提示:经过我无数次制作,目前只有 GT-B2710(Makalu)可以使用,其他的几个机型暂且无法完美使用。
  【步骤三】
  【步骤四】
  【步骤五】
  【步骤六】
  【步骤七】
  【步骤八】
  【步骤九】
  提示:拖拽全部图片时候,拖拉第一张图片到工作台里面第一个图片框内,这样全部图片就都按照顺序排列。
  【步骤十】
  【步骤十一】
  【步骤十二】
  【步骤十三】
  【步骤十四】
  【步骤十五】
  【步骤十六】
  【步骤十七】
  【步骤十八】
  提示:鼠标右键点击后缀 .smt 使用压缩软件打开。
  【步骤十九】
  提示:用压缩软件打开之后,复制或解压 IdleBgAnimObj.qmg 出来,之后修改名称为:bootsamsung.qmg
  第五:到此时,关机动画 bootsamsung.qmg 制作完毕;
  第六:开始制作开机动画 bootsamsungloop.qmg 部分;bootsamsungloop.qmg 同以上 bootsamsung.qmg 制作基本一致,只有一处不一样,具体在【步骤七】。
  第七:到此时,开机动画 bootsamsungloop.qmg 制作完毕,解压出来的 IdleBgAnimObj.qmg 重新命名为 :bootsamsungloop.关机动画 shutdown.qmg 制作方法同以上开机动画 bootsamsung.qmg一致,这里就不再赘述。
  三星GalaxyNote 4替换开关机动画:
  方法有两种:卡刷包卡刷替换(使用CWM高级模式卡刷制作好的开关机动画的卡刷包);小编这里只给大家介绍一种比较容易操作,但是也比较容易出错的方法。修改的时候一定要细心。
  先获取ROOT权限,安装RE管理器,逐一把开机动画bootsamsung.qmg bootsamsungloop.qmg替换到system/media 下;关机动画 shutdown.qmg 替换到 system/media 下 ,或system/media/video/shutdown 下,以上开关机动画替换完毕,修改权限为:RW-R--R之后重启手机即可。
小编点评:
  三星 Galaxy Note 4的开关机动画制作替换教程小编总算是给大家介绍完了,大家不看功劳也看下苦劳,可怜一下小编大冬天的还在这里码字为大家涨姿势。如果觉得这篇三星 Galaxy Note 4开关机动画修改教程对大家有用的话,毫不吝啬的点个赞吧。
     更多玩机技巧敬请关注频道。【】
微信扫一扫
扫描二维码 或 搜索微信公众号"安软市场"即可立即关注!为您推荐最新最热门的游戏与应用……
阅读更多:
&& 或者 &&
品牌:三星
机型:Note 4
固件:Android 4.4
深圳市艾秀信息技术有限公司
All Rights Reserved
&粤网文[号 &更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
使用您的微博帐号登录,即刻尊享微博用户专属服务。
使用您的QQ帐号登录,即刻尊享QQ用户专属服务。
使用您的人人帐号登录,即刻尊享人人用户专属服务。
按住视频可进行拖动
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
收藏成功,可进入查看所有收藏列表
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看:
逆战手游版公布!天天逆战宣传片发布!
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
爸爸去哪儿2游戏 立即参与
逆战手游版公布!天天逆战宣传片发布!
播放量数据:
38,291人已订阅
你可能还想订阅他们:
&正在加载...
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制开机画面,按照国际惯例,一般是分为2屏,当然也有3屏的说法,不管怎样,我这里说得就是最后的一屏,按照bootanimation的字面意思翻译,大概也就是开机动画的意思,那这就不说第几屏了,直接用&开机动画&这词。首先,开机动画的地址:system\media\bootanimation.zip。。。要修改开机动画就是修改bootanimation这个文件。如果说你的手机里没有这个文件,那就是说明你用的是官方原始版本的rom,开机动画没有被修改过,但这不碍事,没有就放一个进去,到时候想换回最原始的开机画面,也可以把bootanimation这个文件删了。官方最原始的开机动画在system\ framework\framework-res.apk\assets\images里面,里面主要是2张图片,高手面可以去研究一下,说不定通过这个文件可以用代码实现动画的过程。接下来,说说bootanimation.zip这个文件的结构。bootanimation里面主要包含一个desc.以及N个文件夹。而文件夹里面放着的就是你要的开机动画的图片。decs.txt的作用就是指导系统如何去执行你的开机画面。下面继续说说desc.txt这个文档要怎么写。先看例子,如果我的开机动画要用到2个文件夹,分别是part1和part2,。。。。我希望开机的时候,先把part1里面的图片都播放一遍,然后再循环播放part2里面的文件,直到进入系统。那么decs.txt文档的内容应该如下:302 480 5p 1 0 part1p 0 0 part2就这么多,现在解释一下这些命令吧。第一行,320 480是代表你屏幕的分辨率,因为我们的胖6是320*480的,这就不多说了。后面的5是说,5帧每秒,不懂的可以这么理解,5是代表一秒钟播放5张图片。就这么简单。第二行,p 1 0 part1。p应该是play吧,也就是播放的意思。1是播放一次。0是空指令,就是什么都不做。part1就是说,这条指令是针对part1这个文件夹的。整条指令的意思就是,播放part1里面的图片1次,然后什么都不做,马上进入下一条指令。第三行,p 0 0 part2。p依然是播放。第一个0这里是代表循环播放,第二个0和上面第二条指令一样,代表什么也不做。part2也就不多说了。至于为什么第一个0为什么是代表循环,只能这么说,这事国际惯例,就像用迅雷的时候,0代表不限制速度一样,系统规定的,你知道就好,别纠结。总结公式如下第一条指令:屏幕的分辨率(空格)播放频率第二条指令:p(空格)播放次数(空格)后续操作(空格)作用文件夹第三条指令:同上第N条指令:同上屏幕分辨率的格式是:宽(空格)高,胖6的就是320 480。。。播放频率,上面已经说清楚了,至于到底要用多大的数字,视你开机动画的张数而定,比如说,一共有100张图片,开机时间是20秒,那么100/20就是5。播放次数,1是代表一次,0代表循环播放。如果要播放2次的话,就是就是打个2上去,应该是这样吧,反正我是没试过,只试过0和1.后续操作,0代表什么都不做,直接进入下一条指令。10是代表稍作停顿。至于文件夹里面的图片,比较简单,首先,纠正一个说法,之前说必须要是png格式,经过我试验证明,jpg格式的也可以,其他的有待试验,不过只支持静态图片这点应该是真的,动态图片同样有待试验。其次,关于图片的尺寸,是不做要求的,只要在txt文档里写好手机的分辨率即可,开机的时候系统会自动适配。其其次要按播放循序命名,建议用5位数字,比如说,第一张图片是00010,第二张就是00020.。。。。为什么要从00010开始,而不是00001?因为这事预防以后要在第一张和第二张中间再插一张图片进去的话,就可以把插进去的图片命名为00011,在00010之后,00020之前。就这么简单。至于图片那里来嘛,当然是自己网上找啦,也可以下载别人的bootanimation,然后修改一下。最后就是压缩包了,把需要用到的part文件夹跟decs.txt打包成zip格式,必须是zip,不能是rar,而且打包的时候压缩方式要选择&存储&模式。然后改名成为bootanimation.zip,复制到SD卡里,再通过RE文件管理器复制到system\media\下面,重启。要注意一下,bootanimation不能太大,大了会卡,一般不要超过3M,。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
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 =
BootAnimation::threadLoop()
if (mAndroidAnimation) {
r = Android(); // 执行android字体闪动的图片
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 即可
以下是我修改后的效果图:
看样子还想那么回事
接下来我们给系统添加开机声音
由于动画是在BootAnimation播放的,所以我们的声音肯定也在这个类中做,照猫画虎
首先在BootAnimation.h添加方法的声明和头文件的引用
#include &media/AudioSystem.h&
#include &media/mediaplayer.h&
添加方法 void bootMusic();
然后在BootAnimation.cpp中实现这个方法:
void BootAnimation::bootMusic()
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)
其实这个目录是随便写的,你想从哪个目录读这个文件就从哪个目录读好了,但是你要把这个文件放在对应的目录下
比如,这个目录是system/etc (这个目录是android系统的目录,不是源码的目录),这个文件夹是只有读权限而没有写权限的,所有你不用试adb shell了,没用的
其实system/etc这个目录对应的是我们编译后out文件夹下的xxx,然后在system/etc,所以你把poweron.wav放到这里就行了,当然如果你这时再emulaor 也同样是看不到效果的,因为你修改完还没有编译,和上面修改图片一样,make snod一下
然后和图上一样,你就会生成新的system.img,当然你之前添加的poweron.wav也会自动被编译进去了
然后再修改bootanimation_main.cpp这个文件,因为方法也申明了,也实现了,就是还没有调用,所以调用就在这里调
//play boot music -yp
BootAnimation *animation = new BootAnimation();
animation-&bootMusic();
修改完这写以后还需要修改Android.mk文件
因为播放声音还需要引入库
LOCAL_SHARED_LIBRARIES := \libcutils \libutils \libbinder \&&& libui \&&&& libskia \&&& libEGL \&&& libGLESv1_CM \&&& libgui \&&& libmedia
请注意,libmedia是新添加的;
完事后就ok了,当然还是需要编译的
mmm& frameworks/base/cmds/bootanimation/
大功告成,这样你就成功的添加了开机音乐
也许有人会问,那android系统自带的那些音乐和铃声在什么地方呢?
源码目录在framworks/base/data/sounds
至于编译完成后放到什么地方了那是Android.mk文件上配置的
不过这里叫AllAudio.mk
我们可以看到他又包含了很多mk文件,在同一目录下就可以找到,上图中就可以,我们随便打开一个看看
这下你们顿时明白了吧,这些资源编译后都去了神马地方
所以,在刚才添加poweron.wav的时候,其实可以直接把声音资源丢到framworks/base/data/sounds这个目录下
然后再mk文件中这样修改:
$(LOCAL_PATH)/poweron.wav:system/etc/poweron.wav \
不用我说,当然是执行mmm还有make snod命令了
其实还有一种办法,如果你不想这么麻烦,你可以之际把poweron.wav 文件丢到./frameworks/base/core/res/assets/sounds下,用的时候怎么用呢?
加载的时候路径是什么呢?我们看看源码
我们可以看到之前我们修改的那两张图片是怎么被加载进来的
而这个方法的两个参数是:
是不是顿时又明白了?
原来精髓所在是有个Asset可以使用,这个和上层开发中是一样的,这个文件夹中的东西是不编译的。
Asset* asset = assets.open(name, Asset::ACCESS_BUFFER);
if (!asset)
return NO_INIT;
SkImageDecoder::DecodeMemory(asset-&getBuffer(false), asset-&getLength(),
&bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
asset-&close();
所以按照这个方法就可以找到poweron.wav 这个文件了,然后修改下bootMusic的代码就可以了。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
原创文章,转载请注明出处,谢谢。
系统通常默认支持开机动画,开机关机铃声服务倒是预先定义了,不过使用时需要在/sysytem/media/下添加相应的音频文件。长按Power键弹出关键选项,关机时也只是显示进度条,而不是我们期望的关机动画同时伴有关机铃声,当然在做二次开发的时候,这些都是可以定制的。下面将逐步分析如何实现这些定制化的需求。
一.&&&&制作开机动画
开机画面是保存在/system/media的bootanimation.zip,下面分析系统开机画面的构成文件名为bootanimation.zip&一定是这个不能修改,里面包含part1 part2文件夹 和desc.txt,part&文件夹里面放的是动画拆分的图片,格式为png,&desc.txt里面是播放的设置。格式是这样的
480 800 15p 1 0 part0p 0 0 part1480 800是指显示的分辨率 宽 高15是一秒的帧数p后面的数字是指播放次数&0为循环,N为播放N次后面那位数字 一般为0(空指令),&表示播放一遍后稍作停顿的时间part0,part1&为文件夹名一般我们只使用part0目录
图片准备好了,desc.txt里面的命令也准备好了,就可以把他们一起打包压缩成zip格式了。记住,是zip格式,而不是rar格式。另外压缩的时候注意一点,压缩的时候压缩方式要选择存储,否则开机时手机会不认的。当然不至于变砖,只是开机的时候会黑着没动画一直到进入桌面为止。
开机动画的替换也很简单,我们把做好的bootanimation.zip替换掉原来的/system/media/bootanimation.zip文件即可。关机动画其实和开机动画的制作一样,我们命名为shutdownanimation.zip,和bootanimation.zip放在同一目录下。
二.&开关机动画实现原理
Android系统在init.rc中定义了很多Servic,具体定义格式可以参考《Android Platform Developer&s Guide》中的&Android Init Language&。Init.rc中定义的Service将会被Init进程创建,其中已经定义的服务就包含了开机动画,但没有关机动画的定义
service bootsound /system/bin/mplayer /system/media/bootsound
&&&&user media
&&&&group audio
&&&&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
当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 - mBootT
&&&LOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) );
&&&mBootFinished =
&&&//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系统可以参考博文。
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)
#if defined(HAVE_PTHREADS)
&&&&setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY);
&&&&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 animation object
&&&&&&&&sp&BootAnimation& boot = new BootAnimation();
&&&&&&&&//根据是否有参数,来设置动画对象的isShutdown属性
&&&&&&&&if (argc & 1) {
&&&&&&&&&&&&if (strcmp(argv[1], "-shutdown")==0) {
&&&&&&&&&&&&&&&&boot-&isShutdown(true);
&&&&&&&&&&&&}
&&&&&&&&IPCThreadState::self()-&joinThreadPool();
&&&&return 0;
new BootAnimation();时,如果有参数-shutdown,&则boot-&isShutdown(true);方法isShutdown和isShutdown使我们新加的,所以先要在frameworks/base/cmds/bootanimation/bootanimation/BootAnimation.h头文件中申明为public,如下:
class BootAnimation : public Thread, public IBinder::DeathRecipient
&&&&&&&&&&&&&&&&BootAnimation();
&&&&virtual&&&&&~BootAnimation();
&&&&sp&SurfaceComposerClient& session()
&&&&bool&&&&&&&&mS
void&&&&&&&&isShutdown(bool shutdown);
&&&&&&&&&&&&&&&&&.
之后修改BootAnimation.cpp
//源码位于frameworks/base/cmds/bootanimation/bootanimation/BootAnimation.cpp
首先在构造函数中初始化mShutdown =表示默认是开机标志
BootAnimation::BootAnimation() : Thread(false)
&&&&mSession = new SurfaceComposerClient();
&&&&mShutdown =
实现isShutdown(bool shutdown);方法
void BootAnimation::isShutdown(bool shutdown)
&&&&mShutdown =
修改status_t BootAnimation::readyToRun()&方法来根据mShutdown值加载动画文件,如
status_t BootAnimation::readyToRun() {
&&&&&&&&&&&&&&
mAndroidAnimation =
if (!mShutdown) {
&&&&status_t err = mZip.open("/data/local/bootanimation.zip");
&&&&if (err != NO_ERROR) {
&&&&&&&&err = mZip.open("/system/media/bootanimation.zip");
&&&&&&&&if (err != NO_ERROR) {
&&&&&&&&&&&&mAndroidAnimation =
&&&&status_t err = mZip.open("/data/local/shutdownanimation.zip");
&&&&if (err != NO_ERROR) {
&&&&&&&&err = mZip.open("/system/media/shutdownanimation.zip");
&&&&&&&&if (err != NO_ERROR) {
&&&&&&&&&&&&mAndroidAnimation =
&&&&mShutdown =
return NO_ERROR;
以上是动画定制化C代码部分的全部修改。
B启动开机铃声服务
startupsound开机铃声服务,shutdownsound关机铃声服务
init.rc定义,service startupsound /system/bin/mplayer /system/media/startupsound
相当于用/system/bin/mplayer对象播放媒体文件/system/media/startupsound,
init.rc定义,service shutdownsound /system/bin/mplayer /system/media/shutdownsound
相当于用/system/bin/mplayer对象播放媒体文件/system/media/ shutdownsound.
到这里,开机动画和开机铃声是正常的,我们还需要修改的是关机时候的执行流程,因为默认的操作时关机确认后显示进度条。
C定制Android关机过程
在Android系统中,长按Power键默认会弹出对话框让你选择&飞行模式&,&静音&,&关机&等功能。
&&&&&我的目标是长按Power键,将会关机,弹出&设备将要关机&选择对话框。如果可以选择&是&关机,和&否&返回系统。
弹出对话框的代码位于:
frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java
长按Power键显示对话框的代码如下:
Runnable mPowerLongPress = new Runnable() {
&&&&public void run() {
&&&&&&&&mShouldTurnOffOnKeyUp =
&&&&&&&&performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
&&&&&&&&sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
&&&&&&&&showGlobalActionsDialog();
调用showGlobalActionsDialog方法将会显示上面提到的显示&飞行模式&,&静音&,&关机&,选项的对话框。
&&&&&&关机的代码位于:
frameworks\policies\base\phone\com\android\internal\policy\impl\GlobalActions.java
文件的createDialog方法中,有如下代码:
mItems = Lists.newArrayList(
&&&&// silent mode
&&&&mSilentModeToggle,
&&&&// next: airplane mode
&&&&mAirplaneModeOn,
&&&&// last: power off
&&&&new SinglePressAction(
&&&&&&&&&&&com.android.internal.R.drawable.ic_lock_power_off,
&&&&&&&&&&&R.string.global_action_power_off) {
&&&&&&&&&&&&&&&&public void onPress() {
&&&&&&&&&&&&&&&&&&&&// shutdown by making sure radio and power are handled accordingly.
&&&&&&&&&&&&&&&&&&&&ShutdownThread.shutdown(mContext, true);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&public boolean showDuringKeyguard() {
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&public boolean showBeforeProvisioning() {
&&&&&&&&&&&&&&&&&&&&return true
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&});
从代码中我们可以看出,如果选择上述对话框的&关机&选项之后,将会调用ShutdownThread的shutdown方法来关机。shutdown方法的第二个参数标识是否弹出询问对话框。
ShutdownThread代码位于
frameworks/base/core/java/com/android/internal/app/ShutdownThread.java
shutdown方法中有如下代码
public static void shutdown(final Context context, boolean confirm) {
&&&&// ensure that only one thread is trying to power down.
&&&&// any additional calls are just returned
&&&&synchronized (sIsStartedGuard){
&&&&&&&&if (sIsStarted) {
&&&&&&&&&&&&Log.d(TAG, "Request to shutdown already running, returning.");
&&&&&&&&&&&&
&&&&Log.d(TAG, "Notifying thread to start radio shutdown");
&&&&if (confirm) {
&&&&&&&&final AlertDialog dialog = new AlertDialog.Builder(context)
&&&&&&&&&&&&&&&.setIcon(android.R.drawable.ic_dialog_alert)
&&&&&&&&&&&&&&&.setTitle(com.android.internal.R.string.power_off)
&&&&&&&&&&&&&&&.setMessage(com.android.internal.R.string.shutdown_confirm)
&&&&&&&&&&&&&&&.setPositiveButton(com.android.internal.R.string.yes,
new DialogInterface.OnClickListener() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&public void onClick(DialogInterface dialog, int which) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&beginShutdownSequence(context);
&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&})
&&&&&&&&&&&&&&&&.setNegativeButton(com.android.internal.R.string.no, null)
&&&&&&&&&&&&&&&&.create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
&&&&&&&&if (!context.getResources().getBoolean(
&&&&&&&&&&&&&com.android.internal.R.bool.config_sf_slowBlur)) {
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
&&&&&&&&dialog.show();
&&&&} else {
&&&&&&&&beginShutdownSequence(context);
确认关机后开始执行beginShutdownSequence(context),这里就是我们定制关机过程的关键。
修改beginShutdownSequence(context)方法,在方法开头打印Log之后增加如下代码:
//我们判断如果有关机动画文件,即显示关机动画,否则显示默认的进度条。
boolean showShutdownAnim = new File("/system/media/shutdownanimation.zip").exists();
&&&&if (showShutdownAnim) {
&&&&&&&&Log.d(TAG, "shutdownanim");
&&&&&&&&//设置前面说的android系统属性ctr.start,即通知属性服务启动关机动画服务
&&&&&&&&android.os.SystemProperties.set("ctl.start", "shutdownanim");
&&&&} else {
&&&&&&&&// throw up an indeterminate system dialog to indicate radio is
&&&&&&&&// shutting down.
&&&&&&&&ProgressDialog pd = new ProgressDialog(context);
&&&&&&&&pd.setTitle(context.getText(com.android.internal.R.string.power_off));
&&&&&&&&pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
&&&&&&&&pd.setIndeterminate(true);
&&&&&&&&pd.setCancelable(false);
&&&&&&&&pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
&&&&&&&&if (!context.getResources().getBoolean(
&&&&&&&&&&&&com.android.internal.R.bool.config_sf_slowBlur)) {
&&&&&&&&&&&&pd.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
&&&&&&&&pd.show();
&&&&boolean playShutdownSound = new File("/system/media/shutdownsound").exists();
&&&&android.os.SystemProperties.getBoolean("ro.config.enable_shutdownshound", false);
&&&&if (playShutdownSound) {
&&&&&&&&// play shutdown sound
&&&&&&&&Log.d(TAG, "shutdownsound");
&&&&&&&&android.os.SystemProperties.set("ctl.start", "shutdownsound");
以上就是定制化实现的所有需要修改的地方,想更深入了解Android property系统可以参考博文《。
Views(...) Comments()

我要回帖

更多关于 安卓开关机动画修改 的文章

 

随机推荐