定製Android關機界面

在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(
                // silent mode
                mSilentModeToggle,
                // next: airplane mode
                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);
        }
    };

經過上述修改,基本上能夠滿足需求了。可能會有一些細節需要做,這裏就不講了。

---------------------------------------------------------轉載於雲中漫步simon------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章