1. 程式人生 > >Android新增一個新的按鍵Key

Android新增一個新的按鍵Key

1、首先先在對應的kl檔案中新增新按鍵的鍵值以及它對應的Keycode

android/frameworks/base/core/res/res/values/Vendor_0f30_Product_0008.kl

注意:0f30是該Input裝置的VID,0008是裝置的PID

key 88    BUTTON_A
key 87    MENU              WAKE_DROPPED
key 68 	  SEARCH
key 67    EXPLORER
# EHK help key
key 66 	  DATASHEET
# EHK abc key
key 65 	  DICTIONARY

我們添加了兩個按鍵key 65 和key 66,66和65這兩個值是通過getevent命令列印轉成十進位制後的值

DATASHEET和DICTIONARY是我們自己定義的androidKeycode

2、在android Keycodes陣列中加入我們新增加的keycode

a. android/frameworks/native/include/android/keycodes.h

    AKEYCODE_MEDIA_AUDIO_TRACK = 222,
	AKEYCODE_CAPTURE = 223,
    AKEYCODE_DATASHEET = 224,	// EHK HELP KEY
    AKEYCODE_DICTIONARY = 225,

b.android/frameworks/native/include/input/KeycodeLabels.h

	{ "CAPTURE", 222 },
    { "DATASHEET", 224 },	// EHK HELP KEY
    { "DICTIONARY", 225 },

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

        names.append(KEYCODE_CAPTURE, "KEYCODE_CAPTURE");
        names.append(KEYCODE_DATASHEET, "KEYCODE_DATASHEET");	// EHK help key
        names.append(KEYCODE_DICTIONARY, "KEYCODE_DICTIONARY");

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

	<enum name="KEYCODE_CAPTURE" value="223" />
        <enum name="KEYCODE_DATASHEET" value="224" />
        <enum name="KEYCODE_DICTIONARY" value="225" />

3、android/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java

      這裡新增按鍵響應的具體動作:

 public int dispatchInputEvent(InputEvent event, Object token,
            FinishedInputEventCallback callback, Handler handler) {
        synchronized (mH) {
            if (mCurMethod != null) {
                if (event instanceof KeyEvent) {
                    KeyEvent keyEvent = (KeyEvent)event;
                    if (keyEvent.getAction() == KeyEvent.ACTION_DOWN
                            && keyEvent.getKeyCode() == KeyEvent.KEYCODE_SYM
                            && keyEvent.getRepeatCount() == 0) {
                        //showInputMethodPickerLocked();
                        return DISPATCH_HANDLED;

                 } else if (keyEvent.getAction() == KeyEvent.ACTION_DOWN
                            && keyEvent.getKeyCode() == KeyEvent.KEYCODE_DATASHEET
                            && keyEvent.getRepeatCount() == 0) {
                                 Log.d(TAG,"zhanbing kbd button pressed");
                                 toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
                        return DISPATCH_HANDLED;
                        }

                }

                if (DEBUG) Log.v(TAG, "DISPATCH INPUT EVENT: " + mCurMethod);

                PendingEvent p = obtainPendingEventLocked(
                        event, token, mCurId, callback, handler);
                if (mMainLooper.isCurrentThread()) {
                    // Already running on the IMM thread so we can send the event immediately.
                    return sendInputEventOnMainLooperLocked(p);
                }

                // Post the event to the IMM thread.
                Message msg = mH.obtainMessage(MSG_SEND_INPUT_EVENT, p);
                msg.setAsynchronous(true);
                mH.sendMessage(msg);
                return DISPATCH_IN_PROGRESS;
            }else{
                                Log.d(TAG, "inputMethod be killed???  mCurId=" + mCurId+ "mWaitForBinding= " + mWaitForBinding);
                                Log.d(TAG, "mCurMethod= " +mCurMethod);
                                if((event instanceof KeyEvent) &&mWaitForBinding && mCurId!=null){

                                        return DISPATCH_FORWARD;
                                }else if((mBindSequence==-1)&&(event instanceof KeyEvent) &&mCurId==null){
                                        //connection cleared
                                        return DISPATCH_FORWARD;
                                }
                }
        }


相關推薦

Android新增一個按鍵Key

1、首先先在對應的kl檔案中新增新按鍵的鍵值以及它對應的Keycode android/frameworks/base/core/res/res/values/Vendor_0f30_Product_0008.kl 注意:0f30是該Input裝置的VID,0008是裝

Android新增一個分割槽

mediatek/build/tools/ptgen/MT6582/partition_table_MT6582.xls 在android分割槽前加上一個分割槽config,為從android分區劃分出來的8MB的分割槽,android分割槽要相應減少8MB; 例如:下

AliOS-Things--EMW3060--nano--新增一個模組

https://github.com/alibaba/AliOS-Things/wiki/Add-a-new-component-example.zh 一、新增一個元件:info_a 架構簡介 |----AliOS-Things |----example

Ardupilot 新增一個的引數在地面站上顯示(Adding a New Parameter to Copter)

目錄 目錄 摘要 一.ardupilot官網增加一個新的引數 1.官方連結 2.文件翻譯 二.重點函式的理解與分析 摘要 本節主要記錄自己在ardupilot多

使用layui 做後臺管理介面,在Tab中的連結點選後新增一個TAB的解決方法

給連結或按鈕  新增 onclick="self.parent.addTab('百度','http://www.baidu.com','icon-add')"   如: <a href="javascript:void(0)" title="google" onclick="s

CentOS 7中新增一個使用者並授權

CentOS 7中新增一個新使用者並授權 [日期:2016-11-26] 來源:Linux社群  作者:woshimrf [字型:大 中 小]     前言 筆記本安裝了一個CentOS,

java 判斷集合是否存在某個元素,如果存在新增一個元素

public static void main(String[] args){ List list = new ArrayList(); list.add("a"); //Object obj = new String(); list.add("b

給kali的metasploit下新增一個的exploit

首先在/usr/share/metasploit-framework/modules/exploits/目錄下新建一個自定義資料夾,例如fwdtest 仿造exploits目錄下的其他exp(rb檔案)編寫自己的exp.rb指令碼(這邊用0day安全:軟體漏洞分析技術裡的

往已有陣列新增一個的鍵值對

$taskList=$this->model->table('task')->where('user_id = '.$this->user_id)->select(); //dump($taskList); $n=0; $ar

筆記三:ASP.NET MVC 新增一個頁面,執行顯示HTTP 404。您正在查詢的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 並確保其拼寫正確。

原操作:直接View下對應資料夾中新增頁面,執行時報錯。解決方案:1.刪除之前建立的頁面,然後找到該資料夾對應的控制器Controller。2.新增以下: public ActionResult path_show()        {            return V

Mysql學習(一)新增一個的使用者並用golang操作Mysql

Mysql新增一個新的使用者並賦予許可權 新增一個自己的使用者到mysql 首先我們需要先用root使用者登入mysql,但是剛安裝完沒有密碼,我們先跳過密碼 [email protected]:~/Git_Project/Go_Test$ sudo mysqld_

Android新增一個音訊型別及雙音訊輸出的實現

Android新增一個音訊型別及雙音訊輸出的實現 2016年01月18日 18:08:44 這歌聲無聊可是輝煌 閱讀數:7946 android定義了很多種音訊型別,完整定義在native層如下,system\core\include\system\audio.h檔案中:

[RK3399][Android7.1]除錯筆記 --- 新增一個的Product/Device

Platform: RK3399 OS: Android 7.1 Board: Firefly-RK3399 標準實現是要建立device/<company>/<device

Android 開啟一個執行緒

package com.example.che; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.widget.Tex

Android新增一個開機完成後執行的指令碼

      在調式一個模組驅動的時候載入驅動模組失敗,但是在系統起來後可以手動載入成功,因此想到在android  啟動完成後通過 執行指令碼來載入驅動模組 1.編寫相關的指令碼,比如device/softwinner/common/prebuild/tools 在該目

在MTK6572當中如何增加一個按鍵,而且此按鍵值在虛擬按鍵當中可以使用

7.修改XML檔案描述符framework/base/core/res/res/values/attr.xml <enum name="KEYCODE_SMS" value="220" />   8.增加測試驗證log在android framework\base\policy\src\com\a

[Linux學習--使用者管理]centos中新增一個使用者,並授權

前言 有時候給root使用者不太方便,新建一個用於並賦予許可權這個做法相對好些 建立新使用者 建立一個使用者名稱為:cmj [[email protected] ~]# adduser cmj 為這個使用者初始化密碼,linux會判斷密碼複雜度,不過可以

Android 新增一個搜尋功能

從android3.0以後,使用SearchView元件,可以在app bar新增一個搜尋功能,你可以定義SearchView什麼時候顯示,什麼時候不顯示。 新增SearchView在App Bar上 首先你要新建一個 menu 檔案,(所有要在bar中

Apollo如何新增一個的CAN裝置

how_to_add_a_new_can_device 在自動機除錯的領域,使用CAN介面的應用非常廣泛,這一塊,在Apollo中也有所體現,今天我們就來結合程式碼分析一下Apollo中的CAN資料互動流程,以及分享如何在Apollo中新增一個新的CAN裝置

在centos7中新增一個使用者,並授權

前言 筆記本裝了一個centos,想要讓別人也可以登入訪問,用自己的賬號確實不太好,於是準備新建一個使用者給他。 建立新使用者 建立一個使用者名稱為:zhangbiao [[email protected] ~]# adduser zhangbiao