1. 程式人生 > >車機開發之新增自定義鍵

車機開發之新增自定義鍵

S700平臺即安卓5.1.1系統新增額外的自定義鍵值按鍵:
在Android的原生系統中鍵值預設情況下是92個,從0-91;一般情況下,這些鍵值是夠用的,但是如果想擴充的話,還是需要新增新的鍵值的;像我們做車機專案的,新增新按鍵鍵值太易見了,比如將倒車檢測做成新自定義鍵值按鍵,我們需要到多個檔案去新增定義程式碼,但是請記住兩點脈絡即可,第一個脈絡屬於理論是ScanCode -> KeyCodeLabel -> KeyCode -> Keyevent即鍵掃描碼 -> 鍵識別符號 -> 鍵碼值 -> 鍵碼處理,這是按系統底層到頂層的邏輯思考;第二個脈絡那就屬於實踐了 -> 不管其他先直接來到KeyEvent.java類去照葫蘆畫瓢也定義一個鍵碼變數如public static final int KEYCODE_CARBACK = 260;(倒車檢測),意思是倒車檢測腳訊號一旦有變化就從底層一層一層將訊號傳遞到應用層,最後應用層就認為是底層傳送類似Home鍵和Back鍵的健碼來處理即可;在定義該鍵碼變數時請到KeyEvent類中最後去定義,什麼意思呢?就是說KeyEvent類會定義很多鍵碼成員變數,從0~幾百都會被定義,只要到最後再新增一行定義自己的鍵碼成員變數即可,為什麼建議到最後,一方面是方便查詢並和系統其他已然定義的區分開來,最重要的是在最後定義時會看到如下幾行註釋:
// NOTE: If you add a new keycode here you must also add it to:
//  isSystem()
//  isWakeKey()
//  frameworks/native/include/android/keycodes.h
//  frameworks/native/include/input/InputEventLabels.h
//  frameworks/base/core/res/res/values/attrs.xml
//  emulator?
//  LAST_KEYCODE
這幾行註釋就是告訴需要到哪些地方去做更改或新增,這樣的話就不需要刻意去記住在哪裡做了修改了,只需要記住來KeyEvent.java類中的最後去定義即可,後面的工作按照這個提示就可完成;
最後還是把新增新自定義按鍵碼所涉及到的檔案都陳列一下,並把目錄路徑發一下,如下:
        涉及到的檔案:input.h檔案 -> *.kl檔案 -> keycodes.h檔案 -> KeyEvent.java檔案 ->attrs.xml檔案

        檔案路徑:    1. input.h檔案在 android\external\kernel-headers\original\uapi\linux目錄下

                      2. *.kl檔案的檔名是不確定的,有可能是自己新建的或者在其他kl檔案中定義,請以自己的專案目錄為準,    我的kl檔案是Vendor_3721_Product_0700_Version_0621.kl,路徑是在android\device\actions\s700_cb6\keylayout目錄下,Vendor_3721_Product_0700_Version_0621.kl裡就一句程式碼 -> key 249 CARBACK

                     3. keycodes.h檔案是在android\frameworks\native\include\android目錄下,新增的程式碼就是在enum列舉類中新增AKEYCODE_CARBACK  = 260

    4.KeyEvent.java檔案是在android\frameworks\base\core\java\android\view目錄下,新增的程式碼如上面所說
    5.attrs.xml檔案是在android\frameworks\base\core\res\res\values目錄,新增的程式碼就是在<attr name="keycode">節點下新增<enum name="KEYCODE_CARBACK" value="260" />即可

注:本人的安卓平臺是5.1.1,以上所有涉及到的目錄和檔名請以自己的平臺和專案路徑為準,僅為參考,估計區別不會太大