安卓11修改power按鍵功能

客戶需要把power鍵的短按休眠功能去除,并且把長按功能改成直接關機,我們先分析系統framework層處理按鍵的代碼:
interceptKeyBeforeQueueing
power按鍵上來都會直接走這里,我們找到power按鍵處理的地方如下:

    case KeyEvent.KEYCODE_POWER: {EventLogTags.writeInterceptPower(KeyEvent.actionToString(event.getAction()),mPowerKeyHandled ? 1 : 0, mPowerKeyPressCounter);// Any activity on the power button stops the accessibility shortcutcancelPendingAccessibilityShortcutAction();result &= ~ACTION_PASS_TO_USER;isWakeKey = false; // wake-up will be handled separatelyif (down) {interceptPowerKeyDown(event, interactive);} else {interceptPowerKeyUp(event, interactive, canceled);}break;}看到這里就明白了,所以短按必定是在interceptPowerKeyUp里處理完成的,因為長按是在按住不放的情況下出來的,所以長按必定是在interceptPowerKeyDown這里處理的。我們先把短按屏蔽掉:
            private void interceptPowerKeyUp(KeyEvent event, boolean interactive, boolean canceled) {final boolean handled = canceled || mPowerKeyHandled;mScreenshotChordPowerKeyTriggered = false;cancelPendingScreenshotChordAction();cancelPendingPowerKeyAction();if (!handled) {if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) == 0) {// Abort possibly stuck animations only when power key up without long press case.mHandler.post(mWindowManagerFuncs::triggerAnimationFailsafe);}// Figure out how to handle the key now that it has been released.mPowerKeyPressCounter += 1;final int maxCount = getMaxMultiPressPowerCount();final long eventTime = event.getDownTime();if (mPowerKeyPressCounter < maxCount) {// This could be a multi-press.  Wait a little bit longer to confirm.// Continue holding the wake lock.Message msg = mHandler.obtainMessage(MSG_POWER_DELAYED_PRESS,interactive ? 1 : 0, mPowerKeyPressCounter, eventTime);msg.setAsynchronous(true);mHandler.sendMessageDelayed(msg, ViewConfiguration.getMultiPressTimeout());return;}// No other actions.  Handle it immediately.//    powerPress(eventTime, interactive, mPowerKeyPressCounter);這句去掉就沒有短按了}// Done.  Reset our state.finishPowerKeyPress();
}

下面就改長按的功能,找到
private void interceptPowerKeyDown(KeyEvent event, boolean interactive)
看到這個方法里有如下內容:

                 // When interactive, we're already awake.// Wait for a long press or for the button to be released to decide what to do.if (hasLongPressOnPowerBehavior()) {if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {powerLongPress();} else {Message msg = mHandler.obtainMessage(MSG_POWER_LONG_PRESS);//長按默認走這里,通過發送MSG_POWER_LONG_PRESS消息到handler處理msg.setAsynchronous(true);mHandler.sendMessageDelayed(msg,ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());if (hasVeryLongPressOnPowerBehavior()) {Message longMsg = mHandler.obtainMessage(MSG_POWER_VERY_LONG_PRESS);longMsg.setAsynchronous(true);mHandler.sendMessageDelayed(longMsg, mVeryLongPressTimeout);}}}這里接收長按消息處理         private class PolicyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case MSG_POWER_LONG_PRESS:powerLongPress();break;最終長按都會到這里處理powerLongPress()直接這樣改就能實現把顯示關機重啟對話框改為直接關機功能@@ -1306,14 +1307,21 @@private void powerLongPress() {final int behavior = getResolvedLongPressOnPowerBehavior();
+         Log.i("fan","behavior is"+behavior);switch (behavior) {case LONG_PRESS_POWER_NOTHING:break;case LONG_PRESS_POWER_GLOBAL_ACTIONS:mPowerKeyHandled = true;
-                performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
-                        "Power - Long Press - Global Actions");
-                showGlobalActionsInternal();
+             performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
+                        "Power - Long Press - Shut Off");
+                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
+                mWindowManagerFuncs.shutdown(behavior == LONG_PRESS_POWER_SHUT_OFF);
+               // performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
+                     //   "Power - Long Press - Global Actions");
+                //showGlobalActionsInternal();break;case LONG_PRESS_POWER_SHUT_OFF:case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:

如果要去除短按2次進入camera,還是在這里修改 private void

interceptPowerKeyDown(KeyEvent event, boolean interactive) {找到如下代碼屏蔽即可:/*這里屏蔽短按打開camera功能 GestureLauncherService gestureService = LocalServices.getService(GestureLauncherService.class);boolean gesturedServiceIntercepted = false;if (gestureService != null) {gesturedServiceIntercepted = gestureService.interceptPowerKeyDown(event, interactive,mTmpBoolean);if (mTmpBoolean.value && mRequestedOrGoingToSleep) {mCameraGestureTriggeredDuringGoingToSleep = true;}}
*/// Inform the StatusBar; but do not allow it to consume the event.sendSystemKeyToStatusBarAsync(event.getKeyCode());schedulePossibleVeryLongPressReboot();// If the power key has still not yet been handled, then detect short// press, long press, or multi press and decide what to do.mPowerKeyHandled = hungUp || mScreenshotChordVolumeDownKeyTriggered|| mA11yShortcutChordVolumeUpKeyTriggered /*|| gesturedServiceIntercepted*/ //這里屏蔽|| handledByPowerManager;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213165.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開啟數據庫性能之旅:MSSQL存儲過程索引優化深度解析

數據庫&#xff0c;如同一座龐大的圖書館&#xff0c;蘊藏著無數寶貴的信息。然而&#xff0c;想要在這個海量數據的世界中迅捷而準確地找到所需&#xff0c;索引就成為了至關重要的引路人。本文將引領讀者深入探討MSSQL存儲過程中索引優化的奧妙&#xff0c;揭示數據庫性能提升…

Spring日志完結篇,MyBatis操作數據庫(入門)

目錄 Spring可以對日志進行分目錄打印 日志持久化&#xff08;讓日志進行長期的保存&#xff09; MyBatis操作數據庫(優秀的持久層框架) MyBatis的寫法 開發規范&#xff1a; 單元測試的寫法 傳遞參數 Spring可以對日志進行分目錄打印 他的意思是說spring相關只打印INFO…

mysql中的DQL查詢

表格為&#xff1a; DQL 基礎查詢 語法&#xff1a;select 查詢列表 from 表名&#xff1a;&#xff08;查詢的結果是一個虛擬表格&#xff09; -- 查詢指定的列 SELECT NAME,birthday,phone FROM student -- 查詢所有的列 * 所有的列&#xff0c; 查詢結果是虛擬的表格&am…

中國各省、市鄉村振興水平數據(附stata計算代碼,2000-2022)

數據簡介&#xff1a;鄉村振興是當下經濟學研究的熱點之一&#xff0c;對鄉村振興進行測度&#xff0c;是研究基礎。測度鄉村振興水平的學術論文廣泛發表在《數量經濟技術經濟研究》等頂刊上。數據來源&#xff1a;主要來源于《中國農村統計年鑒》、《中國人口和就業統計年鑒》…

CRM系統選擇技巧,什么樣的CRM系統好用?

SaaS行業發展迅速&#xff0c;更多的企業逐漸選擇CRM管理系統。打開搜索引擎&#xff0c;有非常多的結果。怎樣在數十萬個搜索結果中選擇適合您的CRM系統&#xff1f;下面我們將聊聊&#xff0c;怎樣選擇CRM系統。 第一步&#xff1a;明確自身需求 重要性&#xff1a;每家企業…

仿照MyBatis手寫一個持久層框架學習

首先數據準備&#xff0c;創建MySQL數據庫mybatis&#xff0c;創建表并插入數據。 DROP TABLE IF EXISTS user_t; CREATE TABLE user_t ( id INT PRIMARY KEY, username VARCHAR ( 128 ) ); INSERT INTO user_t VALUES(1,Tom); INSERT INTO user_t VALUES(2,Jerry);JDBC API允…

深入理解Java虛擬機----內存區域的劃分

Java虛擬機在執行Java程序的過程時&#xff0c;會將它管理的內存劃分為若干個不同的數據區域。主要分為以下幾個區域&#xff1a; 程序計數器 當前線程所執行的字節碼的行號指示器。字節碼解釋器工作時通過改變程序計數器來選取下一條需要執行的字節碼指令&#xff0c;分支、循…

nginx中Include使用

1.include介紹 自己的理解&#xff1a;如果學過C語言的話&#xff0c;感覺和C語言中的Include引入是一樣的&#xff0c;引入的文件中可以寫任何東西&#xff0c;比如server相關信息&#xff0c;相當于替換的作用&#xff0c;一般情況下server是寫在nginx.conf配置文件中的&…

VR串流線方案:實現同時充電傳輸視頻信號

VR&#xff08;Virtual Reality&#xff09;&#xff0c;俗稱虛擬現實技術&#xff0c;是一項具有巨大潛力的技術創新&#xff0c;正在以驚人的速度改變我們的生活方式和體驗&#xff0c;利用專門設計的設備&#xff0c;如頭戴式顯示器&#xff08;VR頭盔&#xff09;、手柄、定…

idea 本身快捷鍵ctrl+d復制 無法像eclipse快捷鍵ctrl+alt+上下鍵,自動換行格式問題解決

問題 例如我使用ctrld 想復制如下內容 復制效果如下&#xff0c;沒有自動換行&#xff0c;還需要自己在進行調整 解決 讓如下快捷鍵第一個刪除 修改成如下&#xff0c;將第二個添加ctrld 提示&#xff1a;對應想要修改的item&#xff0c;直接右鍵&#xff0c;remove是刪…

分子生成領域的stable diffusion - GEOLDM

一、關于stable diffusion 很多人都知道stable diffusion&#xff0c;stable diffusion的出現改變了機器生成領域&#xff0c;讓AI技術第一次無比的接近正常人。大語言模型&#xff0c;AIGC概念于是興起。基于stable diffusion 大家開發了lora&#xff0c; hyperwork等微調技術…

[GWCTF 2019]我有一個數據庫1

提示 信息收集phpmyadmin的版本漏洞 這里看起來不像是加密應該是編碼錯誤 這里訪問robots.txt 直接把phpinfo.php放出來了 這里能看到它所有的信息 這里并沒有能找到可控點 用dirsearch掃了一遍 ####注意掃描buuctf的題需要控制掃描速度&#xff0c;每一秒只能掃10個多一個都…

聚類算法的性能度量

聚類算法的性能度量 聚類算法就是根據數據中樣本與樣本之間的距離或相似度&#xff0c;將樣本劃分為若干組&#xff0f;類&#xff0f;簇&#xff0c;其劃分的原則&#xff1a;簇內樣本相似、簇間樣本不相似&#xff0c;聚類的結果是產生一個簇的集合。 其劃分方式主要分為兩…

API接口并發測試:如何測試API接口的最大并發能力?

本文將深入探討API接口并發測試&#xff0c;介紹并比較不同的API并發測試工具&#xff0c;并分享如何有效測量和提高API接口在最大并發情況下的性能。了解如何應對高并發壓力是保證系統穩定性和用戶滿意度的關鍵&#xff0c;讓我們一起來探索這個重要的話題。 隨著互聯網的迅速…

float,flex和grid布局

頁面布局往往會影響著整體的結構與項目的樣式&#xff0c;通常我們用的布局方式有三種&#xff1a;float,flex,grid 1.float或position布局 1.1概念 首先對于一個頁面來說&#xff0c;有浮動流&#xff0c;文檔流&#xff0c;文本流這幾種模式&#xff0c;而float布局則是…

【EI會議征稿中】第六屆下一代數據驅動網絡國際學術會議(NGDN 2024)

第六屆下一代數據驅動網絡國際學術會議&#xff08;NGDN 2024&#xff09; The Sixth International Conference on Next Generation Data-driven Networks 基于前幾屆在英國埃克塞特 (ISPA 2020) 、中國沈陽 (TrustCom 2021) 和中國武漢 (IEEETrustCom-2022)成功舉辦的經驗&a…

若依vue-新建目錄及菜單

前面我們把標題和logo換成了自己系統的標題和logo了 接下來就是要建立自己需要的菜單和頁面 新建目錄解析 在拉下來的代碼跑起來后 有一個系統菜單--菜單管理(如圖) 在這個菜單的這個頁面內有對應的操作功能 修改功能 這個功能可以修改寫好了的菜單數據 例如:名稱/排序/路由…

python:五種算法(DBO、WOA、GWO、PSO、GA)求解23個測試函數(python代碼)

一、五種算法簡介 1、蜣螂優化算法DBO 2、鯨魚優化算法WOA 3、灰狼優化算法GWO 4、粒子群優化算法PSO 5、遺傳算法GA 二、5種算法求解23個函數 &#xff08;1&#xff09;23個函數簡介 參考文獻&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolutionary programming made…

【小白專用】php執行sql腳本 更新23.12.10

可以使用 PHP 的 mysqli 擴展來執行 SQL 腳本。具體步驟如下&#xff1a; 連接到數據庫&#xff1b;打開 SQL 腳本文件并讀取其中的 SQL 語句&#xff1b;逐條執行 SQL 語句&#xff1b;關閉 SQL 腳本文件&#xff1b;關閉數據庫連接。 以下是通過 mysqli 執行 SQL 腳本的示例…

生產問題: 利用線程Thread預加載數據緩存,其它類全局變量獲取緩存偶發加載不到

生產問題: 利用線程Thread預加載數據緩存偶發加載不到 先上代碼 public class ThreadTest {//本地緩存Map<String, Object> map new HashMap<String, Object>();class ThreadA implements Runnable{Overridepublic void run() {System.out.println("Thread…