设为首页 加入收藏

TOP

Android4.0 添加一个新的Android 键值
2014-11-24 02:53:29 来源: 作者: 【 】 浏览:1
Tags:Android4.0 添加 一个 Android 键值

以添加一个linux键值为217,把它映射为android的键值Browser(这个键值之前不存在)为例介绍一下:


1、android之前没有这个键值,需要定义


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


//定义这个新的键值


public static final int KEYCODE_BROWSER = 210;



然后我们会看到有如下注释:


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


// isSystem()


// native/include/android/keycodes.h


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


// external/webkit/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.



上面的注释已经为我们指明了添加键值所需要的步骤:


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


public final boolean isSystem() {


return native_isSystemKey(mKeyCode);


}



/frameworks/base/jni/android_view_KeyEvent.java


static jboolean native_isSystemKey(JNIEnv* env, jobject clazz, jint keyCode) {


return KeyEvent::isSystemKey(keyCode);


}



/frameworks/base/libs/ui/Input.cpp


bool KeyEvent::isSystemKey(int32_t keyCode) {


switch (keyCode) {


……


case AKEYCODE_BROWSER:


return true;


}


}



3native/include/android/keycodes.h


/*


* Key codes.


*/


enum {


……


AKEYCODE_CALCULATOR = 210,


AKEYCODE_BROWSER = 211,



}



4、frameworks/base/include/ui/KeycodeLabels.h


这里定义的实际上是我们在kl文件,也就是linux keyandroid key的一个映射表中的linux键值和android键值的名称;


比如atc260x-irkeypad.kl


……


key 217 BROWSER //这里的BROWSER就是我们定义的android键值的字符形式,217则是linux键值




那么,BROWSER不能无缘无故就使用,必然有定义位置,这个位置就是KeycodeLabels.h


static const KeycodeLabel KEYCODES[] = {


……


{ "CALCULATOR", 210 },


{"BROWSER", 211}, //这里的BROWSER就是我们上面使用的东西,而211android键值


{ NULL, 0}


}



EventHub.cpp中加载并解析这个mapatc260x-irkeypad.kl,那么得到的是linux键值217keystring,这个string就是BROWSER,有了上面这个KEYCODES数组,就可以获得它对应的android键值了。



5、external/webkit/WebKit/android/plugins/ANPKeyCodes.h


enum ANPKeyCodes {


……



kAppSwitch_ANPKeyCode = 186,



kBrowser_ANPKEYCODE = 211,


};



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








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


LAST_KEYCODE也就是最后一个keycode,因为添加了新的,所以需要更改这个的数值


LAST_KEYCODE = KEYCODE_BROWSER



private static final


SparseArray KEYCODE_SYMBOLIC_NAMES = new SparseArray();




private static void populateKeycodeSymbolicNames() {


……



names.append(KEYCODE_MUSIC, "KEYCODE_MUSIC");


names.append(KEYCODE_CALCULATOR, "KEYCODE_CALCULATOR");


names.append(KEYCODE_BROWSER, "KEYCODE_BROWSER");


}


这些操作完成了之后,就完成了linux键到android的键值映射。也就是android中多了一个KEYCODE_BROWSER它的值是211.


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇V4L2驱动的移植与应用 下一篇Android增加键值【附源码】

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: