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

找到长按电源键控制代码 /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. MTK平台Android 12自定义开关机动画铃声

    完整的patch见 https://download.csdn.net/download/a785722173/87036230 修改文件和Q平台大同小异 Android Q自定义开关机动画_a785 ...

  2. 在Eclipse中导入编译MTK平台Android6.0源码的原生Gallery2应用

    源码下载地址 由于工作的需要,需要在Eclipse中调试MTK平台Android6.0的原生Gallery2应用, 网上已经有很多类似的技术文章了,步骤都差不多, 但是MTK在google原生的Gal ...

  3. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-1

    UT-Exynos 4412 开发板SamSung A9四核4412开发平台android4.0.4体验 http://www.urbetter.com/main.asp lynn@urbetter. ...

  4. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-10HDMI功能调试支持

    经过2012年的等待,四核的开发平台终于跟广大嵌入从业人员见面了,下面让我们来看下UT-Exynos 4412 开发板的详细参数吧,共广大嵌入式开发人员参考. 一.UT-Exynos 4412开发板高 ...

  5. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-5联通3G功能调试支持

    经过2012年的等待,四核的开发平台终于跟广大嵌入从业人员见面了,下面让我们来看下UT-Exynos 4412 开发板的详细参数吧,共广大嵌入式开发人员参考. 一.UT-Exynos 4412开发板高 ...

  6. UT-Exynos4412开发板三星ARM四核旗舰开发平台android4.0体验-7GPS功能调试支持

    经过2012年的等待,四核的开发平台终于跟广大嵌入从业人员见面了,下面让我们来看下UT-Exynos 4412 开发板的详细参数吧,共广大嵌入式开发人员参考. 一.UT-Exynos 4412开发板高 ...

  7. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-17板载按键调试

    经过2012年的等待,四核的开发平台终于跟广大嵌入从业人员见面了,下面让我们来看下UT-Exynos 4412 开发板的详细参数吧,供广大嵌入式开发人员参考. 一.UT-Exynos 4412开发板高 ...

  8. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-13串口功能调试

    经过2012年的等待,四核的开发平台终于跟广大嵌入从业人员见面了,下面让我们来看下UT-Exynos 4412 开发板的详细参数吧,共广大嵌入式开发人员参考. 一.UT-Exynos 4412开发板高 ...

  9. UT-Exynos4412开发板三星ARM四核旗舰开发平台android4.0体验-12音频输入输出功能调试

    经过2012年的等待,四核的开发平台终于跟广大嵌入从业人员见面了,下面让我们来看下UT-Exynos 4412 开发板的详细参数吧,共广大嵌入式开发人员参考. 一.UT-Exynos 4412开发板高 ...

最新文章

  1. 万物皆可JOJO:这个GAN直接让马斯克不做人啦 !Demo在线可玩!
  2. 网络请求可以返回数据的网站_实例解析|Python加解密VIP网站反爬请求头实现数据爬取...
  3. 操作系统OS-分页、页表
  4. poj 1151(线段树求面积并)
  5. MapReduce案例-wordcount-步骤分析
  6. Angular:Use function as controller
  7. MongDB集合文档操作符
  8. 【AI算法模型评测】2 如何评价多标签分类模型的好坏?
  9. Qt QString 与 const char* 类型的转换
  10. 自从在 IDEA 中用了热部署神器 JRebel,开发效率提升了 10 倍!
  11. 镀铬亮条怎么修复_「日系之光」曾经的亚洲C级车排面,十二代丰田皇冠全面修复日记...
  12. java数据库编程入门
  13. 你想要的宏基因组-微生物组知识全在这(2022.1)
  14. 6 检验并打印魔方矩阵c语言,检验并打印魔方矩阵
  15. IT服务管理(一)服务的演变与整体观
  16. Synonyms——中文近义词工具【含源码解析与改进】
  17. 通信LOGO隐秘史(设备商篇)
  18. GCN的Python实现与源码分析
  19. linux系统怎么取消下载,Linux系统怎么彻底删除文件
  20. 手机兼容性测试——机型选择(从系统、屏幕、型号考虑)

热门文章

  1. mysql 5.6 主从同步配置_Mysql 5.6主从同步配置
  2. 087_改变html
  3. echarts雷达图线的样式_echarts 雷达图的个性化设置
  4. ajax 返回数组某个属性值,js中sort方法根据数组中对象的某一个属性值进行排序...
  5. mysql repo_centos7下使用wget命令安装mysql
  6. linux usr g 空间不足,centos 磁盘空间不足
  7. php curl ob start,curl - php中开启缓冲压缩 ob_start('ob_gzhandler') 之后是在什么时候开始的压缩?...
  8. java压测请求线程数_程序员撕开京东 618 大促压测的另一面 | 原力计划
  9. php中的static,php中的static
  10. Linux下的硬链接和软链接