zoukankan      html  css  js  c++  java
  • MTK平台 Android4.0.3 定制关机动画

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

    找到长按电源键控制代码 /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.   
    5.                 public void onPress() {  
    6.                     // shutdown by making sure radio and power are handled accordingly.  
    7.                     mWindowManagerFuncs.shutdown();  
    8.                 }  
    9.   
    10.                 public boolean onLongPress() {  
    11.                     mWindowManagerFuncs.rebootSafeMode();  
    12.                     return true;  
    13.                 }  
    14.   
    15.                 public boolean showDuringKeyguard() {  
    16.                     return true;  
    17.                 }  
    18.   
    19.                 public boolean showBeforeProvisioning() {  
    20.                     return true;  
    21.                 }  
    22.             });  
    23. </span>  
    正常关机会调用此方法 mWindowManagerFuncs.shutdown(); 将弹出 “正在关机” 的弹出框, 现在我们需要在调用此方法时屏弊掉此对话框,同时播放动画和音乐,该如何做昵? 下面一步一步跟踪shutdown() 方法代码,不难发现你最终会找到这个类 /frameworks/base/services/java/com/android/server/pm/ShutdownThread.java 看看这部分代码

    1. <span style="font-size:12px;">synchronized (mEnableAnimatingSync) {  
    2.   
    3.             if(!mEnableAnimating) {  
    4.                 sInstance.mPowerManager.setBacklightBrightness(PowerManager.BRIGHTNESS_DIM);  
    5.             } else {  
    6.                 if (mShutOffAnimation) {  
    7.                     Log.e(TAG, "mIBootAnim.isCustBootAnim() is true");  
    8.                     bootanimCust();  
    9.                 } else {  
    10.                     pd = new ProgressDialog(context);  
    11.                     pd.setTitle(context.getText(com.android.internal.R.string.power_off));  
    12.                     pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));  
    13.                     pd.setIndeterminate(true);  
    14.                     pd.setCancelable(false);  
    15.                     pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
    16.                     /* To fix video+UI+blur flick issue */  
    17.                     pd.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);  
    18.                     pd.show();  
    19.                 }  
    20.                 sInstance.mHandler.postDelayed(mDelayDim, screenTurnOffTime);   
    21.             }  
    22.         }</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目录,重启手机,再关机,如果不出意外的话相信此刻已经出现迹了!! 
  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/liang123/p/6325386.html
Copyright © 2011-2022 走看看