MTK平台 Android4.0.3 定制关机动画

来源:互联网 发布:linux卸载firefox 编辑:程序博客网 时间:2024/05/19 12:40

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

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

private final Runnable mPowerLongPress = new Runnable() {        public void run() {            // The context isn't read            if (mLongPressOnPowerBehavior < 0) {                mLongPressOnPowerBehavior = mContext.getResources().getInteger(                        com.android.internal.R.integer.config_longPressOnPowerBehavior);            }            switch (mLongPressOnPowerBehavior) {            case LONG_PRESS_POWER_NOTHING:                break;            case LONG_PRESS_POWER_GLOBAL_ACTIONS:                mPowerKeyHandled = true;                performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);                showGlobalActionsDialog();                break;            case LONG_PRESS_POWER_SHUT_OFF:                mPowerKeyHandled = true;                performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);                mWindowManagerFuncs.shutdown();                break;            }        }    };
方法 showGlobalActionsDialog() 就是控制关机选项对话框的弹出,点击关机项控制代码在

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

new SinglePressAction(                    com.android.internal.R.drawable.ic_lock_power_off,                    R.string.global_action_power_off) {                public void onPress() {                    // shutdown by making sure radio and power are handled accordingly.                    mWindowManagerFuncs.shutdown();                }                public boolean onLongPress() {                    mWindowManagerFuncs.rebootSafeMode();                    return true;                }                public boolean showDuringKeyguard() {                    return true;                }                public boolean showBeforeProvisioning() {                    return true;                }            });
正常关机会调用此方法 mWindowManagerFuncs.shutdown(); 将弹出 “正在关机” 的弹出框, 现在我们需要在调用此方法时屏弊掉此对话框,同时播放动画和音乐,该如何做昵? 下面一步一步跟踪shutdown() 方法代码,不难发现你最终会找到这个类 /frameworks/base/services/java/com/android/server/pm/ShutdownThread.java 看看这部分代码

synchronized (mEnableAnimatingSync) {            if(!mEnableAnimating) {                sInstance.mPowerManager.setBacklightBrightness(PowerManager.BRIGHTNESS_DIM);            } else {                if (mShutOffAnimation) {                    Log.e(TAG, "mIBootAnim.isCustBootAnim() is true");                    bootanimCust();                } else {                    pd = new ProgressDialog(context);                    pd.setTitle(context.getText(com.android.internal.R.string.power_off));                    pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));                    pd.setIndeterminate(true);                    pd.setCancelable(false);                    pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);                    /* To fix video+UI+blur flick issue */                    pd.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);                    pd.show();                }                sInstance.mHandler.postDelayed(mDelayDim, screenTurnOffTime);             }        }
很明显 mShutOffAnimation 布尔变量是控制是否显示关机动画和默认“正在关机”弹出框的枢纽所在,当它为true时会播放事先放在/system/media/下的shutanimation.和shutaudio资源,而为false时,将会弹出默认“正在关机”对话框,所以此时,要想播放动画我们只需要保证mShutOffAnimation = true就成了,那么这就好改了,可以直接在 此方法的前面默认加上 

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




原创粉丝点击