在Android系統中,長按Power鍵預設會彈出對話方塊讓你選擇“飛航模式”,“靜音”,“關機”等功能.這些功能對於手機非常適用,但是對於機頂盒產品就沒有什麼必要了.本文簡單介紹一下怎樣定製關機介面.
我的目標是長按Power鍵,將會關機,彈出“裝置將要關機”選擇對話方塊.如果可以選擇“是”關機,和“否”返回系統.
彈出對話方塊的代碼位於:
frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java顯示對話方塊的代碼如下:
Runnable mPowerLongPress = new Runnable() { public void run() { mShouldTurnOffOnKeyUp = false; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); showGlobalActionsDialog(); } };
調用showGlobalActionsDialog方法將會顯示上面提到的顯示“飛航模式”,“靜音”,“關機”,選項的對話方塊.
因為我的目標是不要這個節目,把這行代碼注釋掉,替換成關機的代碼就可以了.那麼關機的代碼在哪裡呢?這段代碼位於:
frameworks\policies\base\phone\com\android\internal\policy\impl\GlobalActions.java該檔案的createDialog方法中,有如下代碼:
mItems = Lists.newArrayList( // 靜音mSilentModeToggle, // mAirplaneModeOn飛機模式下, // last: power off 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. ShutdownThread.shutdown(mContext, true); } public boolean showDuringKeyguard() { return true; } public boolean showBeforeProvisioning() { return true } });
從代碼中我們可以看出,如果選擇上述對話方塊的“關機”選項之後,將會調用ShutdownThread的shutdown方法來關機。shutdown方法的第二個參數標識是否彈出詢問對話方塊。
我們可以修改PhoneWindowManager.java的代碼,最終代碼如下:
Runnable mPowerLongPress = new Runnable() { public void run() { mShouldTurnOffOnKeyUp = false; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); //showGlobalActionsDialog(); ShutdownThread.shutdown(mContext, false); } };