Android開(kāi)發(fā)實(shí)現(xiàn)長(zhǎng)按返回鍵彈出關(guān)機(jī)框功能
本文實(shí)例講述了Android開(kāi)發(fā)實(shí)現(xiàn)長(zhǎng)按返回鍵彈出關(guān)機(jī)框功能。分享給大家供大家參考,具體如下:
今天剛好在PhoneWindowManager.java下看,當(dāng)看到長(zhǎng)按Home鍵的功能時(shí),突然想到是不是可以長(zhǎng)按back鍵來(lái)彈出關(guān)機(jī)框。
有想法就試試唄。當(dāng)然想法是根據(jù)長(zhǎng)按home鍵來(lái)的,那么我們應(yīng)該可以模仿長(zhǎng)按Home鍵來(lái)做。經(jīng)過(guò)一番實(shí)驗(yàn),貌似好像可以,拿出來(lái)給大家分享一下!!!
先找到PhoneWindowManager.java文件,在framework/base/policy/src/com/....下,在里面我們能找到關(guān)機(jī)框showGlobalActionsDialog()
(長(zhǎng)按power),最近瀏覽應(yīng)用程序showRecentAppsDialog()
(長(zhǎng)按home),那么我們就模仿長(zhǎng)按home來(lái)調(diào)用關(guān)機(jī)框showGlobalActionsDialog()
。
我們能找到Runnable mPowerLongPress = new Runnable()
和mHomeLongPress = new Runnable()
,因此我們也要?jiǎng)?chuàng)建一個(gè)長(zhǎng)按back鍵的線程
/*****************************************************/ //add by xxnan Runnable mBackLongPress = new Runnable() { public void run() { mBackPressed = false; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); showGlobalActionsDialog(); } }; /*****************************************************/
里面的新增mBackPressed,當(dāng)然你要在開(kāi)始定義一下boolean型的mBackPressed,而
performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
兩句則是用mPowerLongPress的,最后就是顯示關(guān)機(jī)框了showGlobalActionsDialog()
。
而在interceptKeyBeforeDispatching()
中我們也要做相應(yīng)的增加:
/*****************************************************/ //add by xxnan if ((keyCode == KeyEvent.KEYCODE_BACK) && !down) { mHandler.removeCallbacks(mBackLongPress);//應(yīng)該是取消長(zhǎng)按 } if (mBackPressed) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (!down) { mBackPressed = false; } } } if ((keyCode == KeyEvent.KEYCODE_BACK)) { if (down && repeatCount != 0) {//如果按下back鍵而且repeatCount不等于0,(只按一下back鍵repeatCount的值為0,長(zhǎng)按repeatCount的值就會(huì)隨時(shí)間的增加而增加,而且當(dāng)長(zhǎng)按back鍵repeatCount>10才會(huì)彈出關(guān)機(jī)框) if (!keyguardOn) {//不管長(zhǎng)按還是短按keyguardOn都等于false Log.i("longpressback","longpressback"); mHandler.postDelayed(mBackLongPress, ViewConfiguration.getGlobalActionKeyTimeout());//調(diào)用長(zhǎng)按back的線程mBackLongPress } mBackPressed = true; } } /*****************************************************/
剩下的就是編譯一下framework/base下的policy。。。將生成的system/framework/android.policy.jar替換手機(jī)里的就可以了重新啟動(dòng)就ok了?。?!附圖一張
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開(kāi)發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見(jiàn)問(wèn)題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- android實(shí)現(xiàn)短按電源鍵關(guān)機(jī)的實(shí)現(xiàn)代碼
- Android平臺(tái)預(yù)置GMS包后關(guān)機(jī)鬧鐘失效問(wèn)題及解決方法
- Android實(shí)現(xiàn)關(guān)機(jī)后數(shù)據(jù)不會(huì)丟失問(wèn)題
- Android 6.0開(kāi)發(fā)實(shí)現(xiàn)關(guān)機(jī)菜單添加重啟按鈕的方法
- Android仿蘋(píng)果關(guān)機(jī)界面實(shí)現(xiàn)代碼
- Android 修改系統(tǒng)關(guān)機(jī)動(dòng)畫(huà)的實(shí)現(xiàn)
- Android下的CMD命令之關(guān)機(jī)重啟及重啟recovery
- Android實(shí)現(xiàn)關(guān)機(jī)與重啟的幾種方式(推薦)
- Android系統(tǒng)關(guān)機(jī)的全流程解析
- Android 實(shí)現(xiàn)關(guān)機(jī)的多種方式
相關(guān)文章
Android 標(biāo)準(zhǔn)Intent的使用詳解
這篇文章主要介紹了Android 標(biāo)準(zhǔn)Intent的使用詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03Android中View.post和Handler.post的關(guān)系
這篇文章主要介紹了Android中View.post和Handler.post的關(guān)系,View.post和Handler.post是Android開(kāi)發(fā)中經(jīng)常使用到的兩個(gè)”post“方法,關(guān)于兩者存在的區(qū)別與聯(lián)系,文章詳細(xì)分析需要的小伙伴可以參考一下2022-06-06Android開(kāi)發(fā)實(shí)現(xiàn)橫向列表GridView橫向滾動(dòng)的方法【附源碼下載】
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)橫向列表GridView橫向滾動(dòng)的方法,結(jié)合實(shí)例形式分析了Android橫向列表GridView實(shí)現(xiàn)橫向滾動(dòng)的相關(guān)布局與功能實(shí)現(xiàn)技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2018-01-01Android 開(kāi)機(jī)直接運(yùn)行app并當(dāng)做手機(jī)桌面的實(shí)例
今天小編就為大家分享一篇Android 開(kāi)機(jī)直接運(yùn)行app并當(dāng)做手機(jī)桌面的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Android入門之Gallery+ImageSwitcher用法實(shí)例解析
這篇文章主要介紹了Android入門之Gallery+ImageSwitcher用法,對(duì)Android初學(xué)者有很好的參考借鑒價(jià)值,需要的朋友可以參考下2014-08-08使用ViewPager實(shí)現(xiàn)android軟件使用向?qū)Чδ軐?shí)現(xiàn)步驟
現(xiàn)在的大部分android軟件,都是使用說(shuō)明,就是第一次使用該軟件時(shí),會(huì)出現(xiàn)向?qū)?,可以左右滑?dòng),然后就進(jìn)入應(yīng)用的主界面了,下面我們就實(shí)現(xiàn)這個(gè)功能2013-11-11