实现效果是这样的,长按电源键弹出关机对话框,选择关机项将呈现关机动画和音乐直到正常关机完毕,下面说说具体思路及实现代码

找到长按电源键控制代码 /frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

  1. <span style="font-size:12px;">private final Runnable mPowerLongPress = new Runnable() {
  2. public void run() {
  3. // The context isn't read
  4. if (mLongPressOnPowerBehavior < 0) {
  5. mLongPressOnPowerBehavior = mContext.getResources().getInteger(
  6. com.android.internal.R.integer.config_longPressOnPowerBehavior);
  7. }
  8. switch (mLongPressOnPowerBehavior) {
  9. case LONG_PRESS_POWER_NOTHING:
  10. break;
  11. case LONG_PRESS_POWER_GLOBAL_ACTIONS:
  12. mPowerKeyHandled = true;
  13. performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
  14. sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
  15. showGlobalActionsDialog();
  16. break;
  17. case LONG_PRESS_POWER_SHUT_OFF:
  18. mPowerKeyHandled = true;
  19. performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
  20. sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
  21. mWindowManagerFuncs.shutdown();
  22. break;
  23. }
  24. }
  25. };
  26. </span>

方法 showGlobalActionsDialog() 就是控制关机选项对话框的弹出,点击关机项控制代码在

/frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java

  1. <span style="font-size:12px;">new SinglePressAction(
  2. com.android.internal.R.drawable.ic_lock_power_off,
  3. R.string.global_action_power_off) {
  4. public void onPress() {
  5. // shutdown by making sure radio and power are handled accordingly.
  6. mWindowManagerFuncs.shutdown();
  7. }
  8. public boolean onLongPress() {
  9. mWindowManagerFuncs.rebootSafeMode();
  10. return true;
  11. }
  12. public boolean showDuringKeyguard() {
  13. return true;
  14. }
  15. public boolean showBeforeProvisioning() {
  16. return true;
  17. }
  18. });
  19. </span>

正常关机会调用此方法 mWindowManagerFuncs.shutdown(); 将弹出 “正在关机” 的弹出框, 现在我们需要在调用此方法时屏弊掉此对话框,同时播放动画和音乐,该如何做昵? 下面一步一步跟踪shutdown() 方法代码,不难发现你最终会找到这个类 /frameworks/base/services/java/com/android/server/pm/ShutdownThread.java
看看这部分代码

  1. <span style="font-size:12px;">synchronized (mEnableAnimatingSync) {
  2. if(!mEnableAnimating) {
  3. sInstance.mPowerManager.setBacklightBrightness(PowerManager.BRIGHTNESS_DIM);
  4. } else {
  5. if (mShutOffAnimation) {
  6. Log.e(TAG, "mIBootAnim.isCustBootAnim() is true");
  7. bootanimCust();
  8. } else {
  9. pd = new ProgressDialog(context);
  10. pd.setTitle(context.getText(com.android.internal.R.string.power_off));
  11. pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
  12. pd.setIndeterminate(true);
  13. pd.setCancelable(false);
  14. pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
  15. /* To fix video+UI+blur flick issue */
  16. pd.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
  17. pd.show();
  18. }
  19. sInstance.mHandler.postDelayed(mDelayDim, screenTurnOffTime);
  20. }
  21. }</span>

很明显 mShutOffAnimation 布尔变量是控制是否显示关机动画和默认“正在关机”弹出框的枢纽所在,当它为true时会播放事先放在/system/media/下的shutanimation.和shutaudio资源,而为false时,将会弹出默认“正在关机”对话框,所以此时,要想播放动画我们只需要保证mShutOffAnimation = true就成了,那么这就好改了,可以直接在 此方法的前面默认加上

  1. <span style="font-size:12px;">mShutOffAnimation = true;</span>

就成了,然后可以编译试试效果, 执行./makeMtk mm frameworks/base/services/java/  将会生成out/target/product/xxx/system/framework/services.jar , 最后通过adb push 到手机shell下 /system/framework目录,重启手机,再关机,如果不出意外的话相信此刻已经出现迹了!!

MTK平台 Android4.0.3 定制关机动画的更多相关文章

  1. [转]android4.0.3 修改启动动画和开机声音

    本文转自:http://www.cnblogs.com/jqyp/archive/2012/03/07/2383973.html 1. Linux 系统启动,出现Linux小企鹅画面(reboot)( ...

  2. 深入浅出-Android系统移植与平台开发(一)- Android4.0系统的下载与编译

    作者:唐老师,华清远见嵌入式学院讲师. 一.Android4.0系统的下载与编译 Android系统的下载与编译,Google的官方网站上已经给出了详细的说明,请参照Android的官方网址: htt ...

  3. Android MTK平台最完备的开机动画修改教程

    修改手机的开机动画不是什么难事儿. 但修改一款很冷门的"山寨机",就不太好修改第一屏了. 手机是MTK的一款手机,虽然比较贵(价格超过三星Note3),但在我看来跟山寨机木有啥区别 ...

  4. 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器

    作者:唐老师,华清远见嵌入式学院讲师. 1.   编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别 ...

  5. [置顶] 使用严苛模式打破Android4.0以上平台应用中UI主线程的“独断专行”

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 已经有好一段时间没有关注Android应用方面的事情了:)最近单位来了一个Androi ...

  6. Android4.0 Design之UI设计缺陷1

    我想成为Android卓越发展project联赛,不知道Android它如何设计规则,Android4.0谷歌公司的问世后Android一系列的设计原则,程序猿规范,不要盲目模仿IOS它的设计,由于A ...

  7. android4.0 4.1 4.2 4.3 4.4新特性

    http://blog.csdn.net/kaiyang45/article/details/7179349 4.0 http://digi.tech.qq.com/a/20120628/000827 ...

  8. android4.0 锁屏实现(转)

    转载请表明出处:http://blog.csdn.net/wdaming1986/article/details/8837023 好了,言归正传,说说锁屏了,其实把锁屏做成apk的形式,会引起很多问题 ...

  9. Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新

    SystemUI系列文章 Android8.1 MTK平台 SystemUI源码分析之 Notification流程 Android8.1 MTK平台 SystemUI源码分析之 电池时钟刷新 And ...

随机推荐

  1. x264源代码简单分析:滤波(Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  2. 剑指offer面试题5 从头到尾打印链表(java)

    注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...

  3. socket系列之客户端socket——Socket类

    假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...

  4. java的四种引用类型

    java的引用分为四个等级:4种级别由高到低依次为:强引用.软引用.弱引用和虚引用. ⑴强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回 ...

  5. 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)

    ===================================================== 最简单的基于libVLC的例子文章列表: 最简单的基于libVLC的例子:最简单的基于lib ...

  6. UNIX网络编程——TCP连接的建立和断开、滑动窗口

    一.TCP段格式: TCP的段格式如下图所示: 源端口号与目的端口号:源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接. 序号:序号表示在这个报文段中的第一个数据字节 ...

  7. UNIX环境高级编程——进程关系

    一.终端的概念 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),控制终端是保存在PCB中的信息,而我们 ...

  8. 谈谈Ext JS的组件——布局的使用方法续二

    绝对布局(Ext.layout.container.Absolute) 绝对布局让我回想到了使用Foxpro开发的时候,哪时候的界面布局就是这样,通过设置控件的左上角坐标(x,y)和宽度来进行的,因为 ...

  9. C++ Primer 有感(标准库pair)

    与关联容器相关的模板类型,包含两个数据成员,在utility头文件中定义. pair类型提供的操作: pair<T1,T2> p1; pair<T1,T2> p1(v1,v2) ...

  10. javascript之BOM地址栏对象(Location)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...