日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android升级功能键,Android 按键添加转载

發布時間:2025/3/21 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android升级功能键,Android 按键添加转载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

按鍵從Linux到Android

現在的普通按鍵也集成到Linux Input子系統中了,只需要把按鍵對應的IO端口配置好,按鍵就可以工作了。所以一般提供的BSP(或者叫作解決方案)中,已經完善了按鍵驅動。關鍵是快速的了解按鍵的映射。所以這里不作源碼級分析。源碼分析可以參考這里:《基于S3C2440的Linux-3.6.6移植——按鍵驅動》

Linux按鍵的掃描碼

掃描碼是Linux Input系統中規定的碼值,好比PC鍵盤上每個鍵的鍵值。都是數字。

在設備上輸入一下命令后,按鍵可以探測到得到每個按鍵的掃描碼Code.

root@android:/ # busybox hexdump /dev/input/event0 ?(20141009更:同樣可以使用Android中專用的getevent命令)

Android 與 Linux分隔線

Android也定義了一套碼,叫作鍵盤碼,通過一個/system/usr/keylayout/來將兩套碼對應起來。目前調試的是全志的A10的BSP包。這里用的是sun4i-keyboard.kl。(如果沒有其它*.kl,則是默認的qwerty.kl)

Linux上傳的Code是0x00d9對應10進制217,打開sun4i-keyboard.kl后可以看到映射關系:

可以看出對應的是BRIGHTNESS_DOWN,Android中只認BRIGHTNESS_DOWN(這里成為字串),Linux中的Code至此為止。 ?(在Android源碼中也能找到這個映射文件可以依名字搜索找到其位置)

Android源碼中添加該按鍵

如果Android中frameworks/base/core/java/android/view/KeyEvent.java有要添加的功能,比如HOME,則只修改*.kl映射按鍵即可修改或者添加映射。

如果KeyEvent.java中本沒有要添加按鍵的功能,就可以在KeyEvent.java的KeyEvent類最后依葫蘆畫瓢添加:

如不知道功能的鍵盤碼是多少可以到這里找到。

然后根據KeyEvent類最后的添加鍵提示,每個文件都添加上:

// NOTE: If you add a new keycode here you must also add it to:

// ?isSystem()

// ?frameworks/base/native/include/android/keycodes.h

// ?frameworks/base/include/ui/KeycodeLabels.h

// ?external/webkit/Source/WebKit/android/plugins/ANPKeyCodes.h

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

// ?emulator?

// ?LAST_KEYCODE

// ?KEYCODE_SYMBOLIC_NAMES

//

// ?Also Android currently does not reserve code ranges for vendor-

// ?specific key codes. ?If you have new key codes to have, you

// ?MUST contribute a patch to the open source project to define

// ?those new codes. ?This is intended to maintain a consistent

// ?set of key code definitions across all Android devices.

添加后,Android應用程序就可以通過onKeyDown檢測到了檢測到這個按鍵了。至于這個按鍵具體功能的實現比如這里的

BRIGHTNESS_DOWN(亮度減)功能,要修改frameworks/base/policies/base/phone/com

/android/internal/policy/impl/PhoneWindowManager.java。根據具體需求實現。

關于重啟(Reset)鍵

這個“按鍵”一般是通過直接連接CPU芯片上的復位實現重啟功能的。這個直接操作的是CPU,Android(或者Linux)是無法去檢測和控制這個“按鍵”的。

20140306更新:

今天再次遇到同樣的問題,為Android添加按鍵。平臺是rk30,Android版本是4.2.2。遇到了一些新問題和新的挑戰,花費一天時間添加完畢。且做了完整的規劃。以CAMERA和OTHAER鍵為例。

1.確認內核層的鍵值碼

進入adb?shell,使用toolbox中的getevent工具:type?code?value。主要看type為1時的code值是多少。

2.確認*.kl文件

確認方法是交換V+和V-的鍵值碼,結果是:自定義:rk29-keypad.kl,一般鍵盤是:Generic.kl,qwerty.kl已經被Generic.kl取代。

3.確認如何修改*.kl會起效

重啟后

4.確認兩個kl區別

從里邊內容可以大概分別出來rk29-keypad.kl決定新添加的,Generic.kl包含了所有的鍵,優先級低于rk29-keypad.kl,也就是兩個kl文件可以同定義一個鍵值,但會以rk29-keypad.kl首先為準(如果rk29-keypad.kl中定義了,但是字串Android層沒有處理比如”key?114???FUCK”,”FUCK”上層并沒有處理,還是會去處理Generic.kl中的對應鍵串),所以新添加的鍵值都添加到rk29-keypad.kl中,Generic.kl是建議不動的。

注意事項:kl定義的鍵串必須是Android層進行處理的,如果有出現沒有處理的鍵串會導致整個鍵盤都不能使用。如果是鍵盤只會讀Generic.kl,而不會讀rk29-keypad.kl。所以如果是一個特殊的鍵盤,那么要動手修改Generic.kl。這個是實踐結果,具體源碼還沒有找到。

5.先打通一個已經半通的CAMERA

CAMERA是上層已經完善的,在kl文件將新按鍵映射到的CAMERA上(key?132?CAMERA),然后用一個apk來驗證接收。結果OK。

6.打通整個通道-添加OTHER鍵值

在添加過程中還參考了篇文章《Android4.1添加新的按鍵(3)》,這里記錄4.2.2中具體修改了哪些文件:

external/webkit/Source/WebKit/android/plugins/ANPKeyCodes.h

frameworks/base/api/current.txt

frameworks/base/core/java/android/view/KeyEvent.java(兩處)

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

frameworks/base/data/keyboards/Generic.kl

frameworks/base/include/androidfw/KeycodeLabels.h

frameworks/base/libs/androidfw/Input.cpp

frameworks/native/include/android/keycodes.h

其中current.txt是在添加其它文件后執行make?update-api編譯自動修改的結果。關于Android上層在哪里解析的這個兩個kl文件,要等下次更新了。

20140315更新:

很快又用到這里的信息,今天是添加一個紅外遙控的鍵值,結果也得修改Generic.kl,修改rk**.kl不行。就簡單的記錄到這里。

20141010更新:

Android上層也在不斷的更新,4.0/4.2的時候亮度的調節還是要自己添加按鍵來實現,4.4中KeyEvent.java已經有了這兩個按鍵鍵值,對應Generic.kl中已經已經有了對應到Linux內核的標準亮度調試鍵值。

From:

不僅可以驗證內核發出的輸入事件,同樣不可以模擬輸入事件到Android上層。如下命令模擬「亮度減」的按鍵。

$?adb?shell?input?keyevent?BRIGHTNESS_DOWN

執行后就可以Android系統可以響應出來?調整亮度。就可以說明Android上層已經暢通無阻了。

根據以上分析,那么在Android4.4中配置內核中只上報標準的內核亮度鍵值KEY_BRIGHTNESSDOWN/KEY_BRIGHTNESSUP就可以正常的對接了。

但是我同樣遇到了亮度按鍵不能響應的問題,通過上下觀察值都對應上去的,但是卻不能正常響應。

經實驗,將如下「亮度鍵值」添加到rk29-keypad.kl中可以正常響應了:

key?224???BRIGHTNESS_DOWN

key?225???BRIGHTNESS_UP

事后根據Android官方教程Key?Layout?Files分析它會優先讀取/system/usr/keylayout/DEVICE_NAME.kl按鍵映射文件。而設備上的物理按鍵的設備名正好是「rk29-keypad」,可以通過getevent查看出來。

這也解釋了20140315添加紅外遙控器的鍵值時不能添加到rk29-keypad.kl中,而添加到Generic.kl可以正常。因為Generic.kl的屬于fallback級別的映射文件。針對遙控器正確的方法同樣新建立一個DEVICE_NAME.kl的映射文件。比如遙控器設備名為rkxx-remotectl那么新建一個rkxx-remotectl.kl映射文件,內容是和Generic.kl中類似的每個鍵值對應的鍵碼。這個方法要遠比直接修改Generic.kl文件要好的多了。

其實同樣也有了新的疑問,如果DEVICE_NAME.kl中沒有聲明的鍵值,那么就不會去Generic.kl中查找,這點我是有點自己的建議的,應該像字庫一樣,在相應的字庫中查找不到的字都到fallback字體中查找一下。

20141018更新:

Keylayout文件中所有的「字串」必須在當前版本系統的源碼的類中存在。否則系統會認為該Keylayout是無效的。所以可以添加Keylayout和添加「字串」到KeyEvent要同步進行。

總結

以上是生活随笔為你收集整理的android升级功能键,Android 按键添加转载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。