Android 13----在framworks層映射一個物理按鍵

基于Android 13.

一、映射步驟

  • 確定要映射的物理按鍵值

  • 在kl文件中增加鍵值對

  • 在InputEventLabels.cpp增加AKEYCODE

  • 在keycodes.h中定義AKEYCODE值

  • attrs.xml中增加KEYCODE

  • KeyEvent.java中增加KEYCODE

  • 在PhoneManagerWindow等相關類中進行攔截處理相關KEYCODE,屬于具體的業務邏

二、確定要映射的物理按鍵值?

通過getevent,可以知道對應的物理按鍵值。
輸入getevent后,按一次對應的物理按鍵,會有相應的值輸出:

/dev/input/event0:按鍵對應的設備節點(也就是getevent讀哪個設備節點讀出的按鍵信息)

name:這個設備節點對應的名字,如/dev/input/event0設備節點對應的名字為"gpio-keys"

00b5:按鍵對應的物理按鍵值(也就是kernel層冒上來的按鍵值)

00b5是十六進制值,在frameworks層進行映射的時候需要轉化為十進制,為181。

這樣就確定了要映射的物理按鍵值。

三、在kl文件中增加鍵值對

在kl文件中增加鍵值對之前,先要找到對應的kl文件。(kl文件即按鍵布局文件)

通過getevent,可以知道這個按鍵對應的設備節點,以及設備節點對應的名字:

這個b5按鍵對應設備節點是/dev/input/event0,這個設備節點對應的name為"gpio-keys"

通過adb shell dumpsys input查看對應的kl文件:

7: gpio-keysClasses: KEYBOARDPath: /dev/input/event0Enabled: trueDescriptor: 485d69228e24f5e46da1598745890b214130dbc4Location: gpio-keys/input0ControllerNumber: 0UniqueId: Identifier: bus=0x0019, vendor=0x0001, product=0x0001, version=0x0100KeyLayoutFile: /system/usr/keylayout/gpio-keys.klKeyCharacterMapFile: /system/usr/keychars/Generic.kcmConfigurationFile: VideoDevice: <none>

故我們需要在gpio-keys.kl中增加鍵值對:

key 181 KEY_XXX

PS:

AOSP原生代碼中放置kl的路徑:frameworks/base/data/keyboards

設備中放置kl的路徑:/system/usr/keylayout

四、在InputEventLabels.cpp增加AKEYCODE

在InputEventLabels.cpp通DEFINE_KEYCODE宏,增加AKEYCODE

frameworks/native/libs/input/InputEventLabels.cpp

DEFINE_KEYCODE(KEY_XXX)

這里有一個小小的地方需要注意下:

#define DEFINE_KEYCODE(key) { #key, AKEYCODE_##key }...
DEFINE_KEYCODE(THUMBS_DOWN), \
DEFINE_KEYCODE(PROFILE_SWITCH), \
DEFINE_KEYCODE(KEY_XXX)/* add by xxx */

在兩行DEFINE_KEYCODE之間添加注釋的時候,不要采用// comment;會導致編譯不過。

DEFINE_KEYCODE外面是個宏,需要用/**/而且不能漏了 \

DEFINE_KEYCODE(PROFILE_SWITCH), \
DEFINE_KEYCODE(KEY_XXX)/* add by ... */或者:
DEFINE_KEYCODE(PROFILE_SWITCH), \
/* add by ... */ \
DEFINE_KEYCODE(KEY_XXX)

五、在keycodes.h中定義AKEYCODE值

在keycodes.h中增加AKEYCODE鍵值對

frameworks/native/include/android/keycodes.h

/** Used to switch current account that is consuming content.* May be consumed by system to switch current viewer profile. */
AKEYCODE_PROFILE_SWITCH = 288,
/** add by start. */
AKEYCODE_SKY_XXX = 701
/** add by end. */

PS.這個701是自己定義的,只要取比上一個大的值(這里是288)即可,但是考慮到289在attrs.xml中已經被占用,故這里取大一點的值,給AOSP預留一部分取值范圍。

六、attrs.xml中增加KEYCODE

在attrs.xml中增加KEYCODE_XXX:

frameworks/base/core/res/res/values/attrs.xml

<!-- add by  start. -->
<enum name="KEYCODE_KEY_XXX" value="701" />
<!-- add by  end. -->

七、KeyEvent.java中增加KEYCODE

在KeyEvent.java中增加KEYCODE_XXX:

frameworks/base/core/java/android/view/KeyEvent.java

/** Key code constant: Demo Application key #4. */public static final int KEYCODE_DEMO_APP_4 = 304;/** add by  start. */public static final int KEYCODE_KEY_XXX = 701;/** add by  end. */

到這里,框架層映射按鍵值就完成了,接下來進行按鍵攔截測試。

八、攔截處理

在PhoneManagerWindow等相關類中進行攔截處理相關KEYCODE_XXX,屬于具體的業務邏輯。

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

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

相關文章

【Java EE】Mybatis-Plus

1. 開始先進行和以前一樣的項目配置、數據庫連接配置&#xff0c;在這些基礎上&#xff0c;額外引入 Mybatis-Plus 依賴即可。<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><vers…

各版本操作系統對.NET支持情況(250707更新)

借助虛擬機和測試機&#xff0c;檢測各版本操作系統對.NET的支持情況。 安裝操作系統后&#xff0c;安裝相應運行時并能夠運行星塵代理或幸運四葉草為通過條件。 測試平臺&#xff1a;VMware Workstation 鏡像來源&#xff1a;MSDN I Tell You 參考&#xff1a; .NET Fram…

5-Kafka-replication(副本機制)概念

&#x1f504; Kafka 副本機制&#xff08;Replication&#xff09; 核心概念概念說明Replica (副本)分區的完整拷貝&#xff0c;分布在不同 BrokerReplication Factor副本總數&#xff08;含 Leader&#xff09;&#xff0c;生產環境建議 ≥3Leader Replica處理所有讀寫請求&a…

langgraph的ReAct應用

一、什么是langgraph的ReActLangGraph 中的 ReAct&#xff08;Reasoning Acting&#xff09;代理是一種結合推理與行動能力的 AI 代理架構&#xff0c;通過動態決策鏈實現復雜任務處理。以下是其核心要點及實踐指南。1、ReAct 代理的核心原理1.1工作流程&#xff1a;ReAct 代理…

一個編輯功能所引發的一場知識探索學習之旅(JavaScript、HTML)

文章目錄一個編輯功能所引發的一場知識探索學習之旅&#xff08;JavaScript、HTML&#xff09;1. 一個編輯功能案例2. 知識點探索學習3. 參考資料一個編輯功能所引發的一場知識探索學習之旅&#xff08;JavaScript、HTML&#xff09; 1. 一個編輯功能案例 HTML&#xff1a; &l…

kali制作Windows木馬

環境描述&#xff1a;攻擊機&#xff1a;Kali-2025實驗靶機&#xff1a;Windows11不要攻擊他人&#xff0c;這只是網絡安全實驗還是一樣獲取IP地址制作好之后開服務&#xff0c;上傳下載在靶機右鍵保留下載記得把防火墻&#xff0c;安全中心關了否則無法下載之后就可以kali控制…

從零實現一個GPT 【React + Express】--- 【1】初始化前后端項目,實現模型接入+SSE

摘要 本系列文章主要是實現一個能夠對話以及具有文生圖等功能的模型應用。主要UI界面會參考chat-gpt,豆包等系列應用。模型使用的是gpt開源的大模型。 如果你是一個前端開發工程師需要一個自己的開源項目&#xff0c;可以學習這個系列的文章&#xff0c;不需要有很完整的后端…

【PTA數據結構 | C語言版】在順序表 list 的第 i 個位置上插入元素 x

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個整數存入順序表&#xff0c;對任一給定整數 x&#xff0c;將其插入順序表中指定的第 i 個位置。注意&#xff1a;i 代表位序&#xff0c;從 1 開始&#xff0c;不是數…

汽車智能化2.0引爆「萬億蛋糕」,誰在改寫游戲規則?

進入2025年&#xff0c;長安、奇瑞、比亞迪等各大主機廠紛紛將智能化推進至全新高度&#xff0c;中國汽車智能化競爭進入了“技術市場生態”綜合較量階段。一方面&#xff0c;各大主機廠全力推進輔助駕駛的規模化普及&#xff0c;掀起了一場關于高階輔助駕駛的“技術平權”革命…

QT 第八講 --- 控件篇 Widget(三)界面系列

前言&#xff1a; 在上一講《QT 第七講 --- 控件篇 &#xff08;二&#xff09;window系列與qrc機制》中&#xff0c;我們探討了應用程序窗口&#xff08;QMainWindow, QWidget&#xff09;的基礎結構、窗口標志、狀態以及Qt強大的資源管理機制&#xff08;.qrc文件&#xff0…

廣州華銳互動:AR 領域的創新與服務先鋒?

&#xff08;一&#xff09;定制化服務? 廣州華銳互動秉持 “以客戶為中心” 理念&#xff0c;為客戶提供高度定制化 AR 解決方案。項目初期&#xff0c;通過多種方式深入了解客戶需求&#xff0c;挖掘痛點。基于需求分析&#xff0c;技術團隊運用自主研發技術和先進算法&…

暑假算法日記第一天

目標?&#xff1a;刷完靈神專題訓練算法題單 階段目標&#x1f4cc;&#xff1a;【算法題單】滑動窗口與雙指針 LeetCode題目:1456. 定長子串中元音的最大數目643. 子數組最大平均數 I1343. 大小為 K 且平均值大于等于閾值的子數組數目2090. 半徑為 k 的子數組平均值2379. 得…

【軟考高項】信息系統項目管理師-第1章 信息化發展(1.5 數字化轉型與元宇宙、1.6 標題類知識點、1.7 十四五規劃內容匯總)

文章大綱 第1章 信息化發展1.5 數字化轉型與元宇宙1.5.1 數字化轉型1.5.2 元宇宙1.6 標題類知識點1.7 十四五規劃內容匯總1.8 10道試題第1章 信息化發展 學習建議: 此章內容大部分為新增內容,基本是全新的章節2023年5月考試2分選擇,5分案例2023年下半年各批次選擇題2分左右1.…

STM32F103C8T6單片機內部執行原理及啟動流程詳解

引言&#xff1a;為什么深入理解STM32啟動流程很重要&#xff1f;STM32F103C8T6作為嵌入式開發中最常用的單片機之一&#xff0c;其內部執行原理和啟動流程是理解嵌入式系統底層運行機制的核心。無論是開發Bootloader、調試HardFault異常&#xff0c;還是優化系統啟動速度&…

【python 常用的數學科學/計算機視覺等工具】

當然有&#xff01;在科學計算、機器學習、圖像處理等領域&#xff0c;scikit-learn、scikit-image&#xff08;skimage&#xff09;、SciPy、OpenCV 是非常重要的庫&#xff0c;但它們不是唯一的。以下是一些與它們類似或互補的項目&#xff0c;按照用途分類列出&#xff1a; …

LUMP+NFS架構的Discuz論壇部署

一、配置準備 每臺主機都安裝mysql、nfs、php、mysql 對每臺主機都進行關閉防火墻、上下文等&#xff0c;減少阻礙[rooteveryone ~]# systemctl stop firewalld [rooteveryone ~]# setenforce 0安裝插件等[rootlocalhost mysql]# yum install -y nfs-utils nginx [rootlocalho…

C++STL-deque

一.基礎概念deque和vector一樣都是對元素的操作&#xff0c;不同點&#xff1a;vector對元素增刪后元素會往前或往后移&#xff0c;如果數據不大沒有太多影響&#xff0c;如果數據很大效率會變低&#xff1b;deque對元素增刪不會使元素位置改變&#xff0c;所有效率會變高。二.…

字節跳動高質量聲音克龍文字轉語音合成軟件MegaTTS3整合包

MegaTTS3是抖音團隊聯合國內其他大學研發的一款語音合成及聲音克龍應用&#xff0c;可實現零樣本語音克龍及富有情感的自然語音合成。我基于當前最新版制作了免安裝一鍵啟動整合包。 MegaTTS3介紹 MegaTTS 3 是字節跳動&#xff08;ByteDance&#xff09;與浙江大學聯合開發的…

RPC:遠程過程調用機制

目錄 1、概念 2、RPC架構 2.1 RPC的四個核心組件 2.2 訪問流程 3、關鍵概念 3.1 接口定義語言 (IDL - Interface Definition Language) 3.2 序列化與反序列化 (Serialization & Deserialization - Marshalling/Unmarshalling) 3.3 網絡傳輸 (Transport) 3.4 服務發…

EPLAN 電氣制圖(六):電機正反轉副勾主電路繪制

一、項目背景&#xff1a;為什么繪制電機正反轉主電路&#xff1f; 在多功能天車系統中&#xff0c;電機正反轉控制是核心功能之一。通過 EPLAN 繪制主電路&#xff0c;不僅能清晰展示電源分配、換相邏輯和線纜連接&#xff0c;還能為后續 PLC 控制設計奠定基礎。本次以西門子設…