Android 關(guān)機(jī)彈出選擇菜單的深入解析
更新時(shí)間:2013年06月15日 18:31:22 作者:
本篇文章是對(duì)Android 關(guān)機(jī)彈出選擇菜單進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
在Android系統(tǒng)中,長(zhǎng)按Power鍵默認(rèn)會(huì)彈出對(duì)話框讓你選擇“飛行模式”,“靜音”,“關(guān)機(jī)”等功能。這些功能對(duì)于手機(jī)非常適用,但是對(duì)于機(jī)頂盒產(chǎn)品就沒有什么必要了。
本文簡(jiǎn)單介紹一下怎樣定制關(guān)機(jī)界面。
我的目標(biāo)是長(zhǎng)按Power鍵,將會(huì)關(guān)機(jī),彈出“設(shè)備將要關(guān)機(jī)”選擇對(duì)話框。如果可以選擇“是”關(guān)機(jī),和“否”返回系統(tǒng)。
彈出對(duì)話框的代碼位于:
frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java
顯示對(duì)話框的代碼如下:
java代碼:
Runnable mPowerLongPress = new Runnable() {
public void run() {
mShouldTurnOffOnKeyUp = false;
performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); showGlobalActionsDialog();
}
};
調(diào)用showGlobalActionsDialog方法將會(huì)顯示上面提到的顯示“飛行模式”,“靜音”,“關(guān)機(jī)”,選項(xiàng)的對(duì)話框。
因?yàn)槲业哪繕?biāo)是不要這個(gè)節(jié)目,把這行代碼注釋掉,替換成關(guān)機(jī)的代碼就可以了。那么關(guān)機(jī)的代碼在哪里呢?這段代碼位于:
frameworks\policies\base\phone\com\android\internal\policy\impl\GlobalActions.java該文件的createDialog方法中,有如下代碼:
java代碼:
mItems = Lists.newArrayList(
// 靜音模式mSilentModeToggle,
// mAirplaneModeOn飛機(jī)模式下,
// 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
}
});
從代碼中我們可以看出,如果選擇上述對(duì)話框的“關(guān)機(jī)”選項(xiàng)之后,將會(huì)調(diào)用ShutdownThread的shutdown方法來(lái)關(guān)機(jī)。shutdown方法的第二個(gè)參數(shù)標(biāo)識(shí)是否彈出詢問對(duì)話框。
我們可以修改PhoneWindowManager.java的代碼,最終代碼如下:
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);
}
};
本文簡(jiǎn)單介紹一下怎樣定制關(guān)機(jī)界面。
我的目標(biāo)是長(zhǎng)按Power鍵,將會(huì)關(guān)機(jī),彈出“設(shè)備將要關(guān)機(jī)”選擇對(duì)話框。如果可以選擇“是”關(guān)機(jī),和“否”返回系統(tǒng)。
彈出對(duì)話框的代碼位于:
frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java
顯示對(duì)話框的代碼如下:
復(fù)制代碼 代碼如下:
java代碼:
Runnable mPowerLongPress = new Runnable() {
public void run() {
mShouldTurnOffOnKeyUp = false;
performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); showGlobalActionsDialog();
}
};
調(diào)用showGlobalActionsDialog方法將會(huì)顯示上面提到的顯示“飛行模式”,“靜音”,“關(guān)機(jī)”,選項(xiàng)的對(duì)話框。
因?yàn)槲业哪繕?biāo)是不要這個(gè)節(jié)目,把這行代碼注釋掉,替換成關(guān)機(jī)的代碼就可以了。那么關(guān)機(jī)的代碼在哪里呢?這段代碼位于:
frameworks\policies\base\phone\com\android\internal\policy\impl\GlobalActions.java該文件的createDialog方法中,有如下代碼:
復(fù)制代碼 代碼如下:
java代碼:
mItems = Lists.newArrayList(
// 靜音模式mSilentModeToggle,
// mAirplaneModeOn飛機(jī)模式下,
// 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
}
});
從代碼中我們可以看出,如果選擇上述對(duì)話框的“關(guān)機(jī)”選項(xiàng)之后,將會(huì)調(diào)用ShutdownThread的shutdown方法來(lái)關(guān)機(jī)。shutdown方法的第二個(gè)參數(shù)標(biāo)識(shí)是否彈出詢問對(duì)話框。
我們可以修改PhoneWindowManager.java的代碼,最終代碼如下:
復(fù)制代碼 代碼如下:
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);
}
};
相關(guān)文章
Flutter 日期時(shí)間DatePicker控件及國(guó)際化
這篇文章主要介紹了Flutter 日期時(shí)間DatePicker控件及國(guó)際化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Android ViewPager的MVP架構(gòu)搭建過程
本文主要介紹了ViewPager在Android中的作用以及使用場(chǎng)景,如引導(dǎo)頁(yè)、圖片瀏覽器、新聞或文章內(nèi)容的多標(biāo)簽頁(yè)等,同時(shí),還詳細(xì)闡述了如何通過MVP架構(gòu)來(lái)搭建ViewPager,將視圖和邏輯進(jìn)行解耦,提高代碼的可測(cè)試性、可復(fù)用性,使代碼結(jié)構(gòu)更清晰且易于擴(kuò)展功能2024-10-10
創(chuàng)建Android守護(hù)進(jìn)程實(shí)例(底層服務(wù))
這篇文章主要介紹了創(chuàng)建Android守護(hù)進(jìn)程實(shí)例(底層服務(wù)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-03-03
Android打包篇:Android Studio將代碼打包成jar包教程
這篇文章主要介紹了Android打包篇:Android Studio將代碼打包成jar包教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-03-03
android 微信 sdk api調(diào)用不成功解決方案
最近一直在調(diào)用微信的API,卻發(fā)現(xiàn)一直調(diào)用不成功,糾結(jié)了好久,各方面找教程,現(xiàn)在曬出來(lái)和大家分享一下2012-11-11
Android中創(chuàng)建快捷方式及刪除快捷方式實(shí)現(xiàn)方法
這篇文章主要介紹了Android中創(chuàng)建快捷方式及刪除快捷方式實(shí)現(xiàn)方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-06-06

