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

找到长按电源键控制代码 /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. 微信开发之使用java获取签名signature(贴源码,附工程)

    一.前言 微信接口调用验证最终需要用到的三个参数noncestr.timestamp.signature: 接下来将会给出获取这三个参数的详细代码 本文的环境eclipse + maven 本文使用到 ...

  2. static修饰符详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  3. CSS简单使用

    CSS简单使用 标签 : 前端技术 CSS(Cascading Style Sheet : 层叠样式表单)用来定义网页显示效果. 可以解决HTML代码对样式定义的重复,提高后期样式代码的可维护性,并增 ...

  4. Effective C++ ——让自己习惯C++

    条款一:视C++为一个语言联邦 为了理解C++,你必须认识其主要的次语言.幸运的是总共只有四个: C:C++是由C语言继承而来的,必然对C有很好的兼容性,这一部分主要包括C中的一些语言,库函数等.但当 ...

  5. 如何将Ubuntu部署到U盘中,用U盘安装linux操作系统

    http://jingyan.baidu.com/article/d5c4b52be79960da560dc59f.html 用U盘装一个linux系统是非常简单的事情,不会就看看这篇文章吧,后期我会 ...

  6. shell-----sed命令详解

    Table of Contents 1. Sed简介  2. 定址  3. Sed命令  4. 选项  5. 元字符集  6. 实例  7. 脚本 1. Sed简介 sed是一种在线编辑器,它一次处理 ...

  7. linux目录间的瞬间转移:dtags

    http://blog.csdn.net/pipisorry/article/details/50923957 linux下dtags的安装 apt-get install python3-pip # ...

  8. Java-IO之PrintWriter(字符打印输出流)

    PrintWriter是字符类型的打印输出流,继承于Writer,用于向文本输出流打印对象的格式化表示形式. PrintWriter的主要函数: PrintWriter(OutputStream ou ...

  9. USB OTG原理+ ID 检测原理

    OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...

  10. 【翻译】Ext JS最新技巧——2015-10-21

    原文:Top Support Tips Kevin Cassidy:全宽度的字段错误信息 有考虑过让验证信息显示在表单字段的下面(msgTarget:'under'),但最后发现验证信息被压缩显示了吗 ...