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

找到长按电源键控制代码 /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. everything of people’s life can changed in their twenties

    还记得三年前,独自背着行李,流浪远方,来到曾经只在地理课本上才熟悉的北国,带着好奇,带着期望,带着激动的心情,想感受毛爷爷当年霸气的北国风光,千里冰封的美丽,想知道北方的面条到底有多少种花样,想走进那 ...

  2. PullToRefreshScrollView 嵌套RecyclerView实现特卖列表倒计时抢购

    不久之前,我们谈到了通过Handler与timer及TimerTask结合实现倒计时抢购列表,那个是PullToRefreshListView实现的,今天要讲的是PullToRefreshScroll ...

  3. Oracle使用游标删除所有用户数据表中的所有记录脚本

    应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自 ...

  4. Android:Field can be converted to a local varible.

    背景 使用 Android Studio 开发 Android 有一段时间了,偶尔会碰到 AS 在一些私有变量上有黄色高亮提示Field can be converted to a local var ...

  5. 【一天一道LeetCode】#206. Reverse Linked List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Reverse ...

  6. Mybatis简单入门

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  7. (七十八)使用第三方框架INTULocationManager实现定位

    前面(第七十五.七十六篇)讲述了如何通过CoreLocation获取位置,授权.获取等相当复杂,如果借助于第三方框架,可以简单的实现授权与定位. 首先在GitHub中搜索LocationManager ...

  8. 【VSTS 日志 15/11/18】 – 插件应用市场,RM,包管理器等

    [小编]从今天开始,我将在这个博客上连载Visual Studio Team Service的定期更新.VSTS是Team Foundation Server 的在线版本,微软每3周会对这个服务进行更 ...

  9. EBS DBA指南笔记(二)

    第三章 监控和诊断   本章涵盖以下几个主题:监测的方法,数据库的监测,apache的监测,forms的监测,并发管理器的监测,服务器的监测,网络的监测,其它的一些监测和诊断方法. 1.监测的方法:主 ...

  10. 【一天一道LeetCode】#96. Unique Binary Search Trees

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given n ...