android键盘映射之一
按键事件
对于按键事件,调用mDevices->layoutMap->map进行映射。映射实际是由 KeyLayoutMap::map完成的,KeyLayoutMap类里读取配置文件qwerty.kl,由配置 文件 qwerty.kl 决定键值的映射关系。你可以通过修 改./development/emulator/keymaps/qwerty.kl来改变键值的映射关系。
JNI 函数
在frameworks/base/services/jni/com_android_server_KeyInputQueue.cpp文 件中,向 JAVA提供了函数android_server_KeyInputQueue_readEvent,用于读 取输入设备事件。
C代码:
static jboolean android_server_KeyInputQueue_readEvent(JNIEnv* env, jobject clazz,
jobject event)
{
gLock.lock();
sp hub = gHub;
if (hub == NULL) {
hub = new EventHub;
gHub = hub;
}
gLock.unlock();
int32_t deviceId;
int32_t type;
int32_t scancode, keycode;
uint32_t flags;
int32_t value;
nsecs_t when;
bool res = hub->getEvent(&deviceId, &type, &scancode, &keycode,
&flags, &value, &when);
env->SetIntField(event, gInputOffsets.mDeviceId, (jint)deviceId);
env->SetIntField(event, gInputOffsets.mType, (jint)type);
env->SetIntField(event, gInputOffsets.mScancode, (jint)scancode);
env->SetIntField(event, gInputOffsets.mKeycode, (jint)keycode);
env->SetIntField(event, gInputOffsets.mFlags, (jint)flags);
env->SetIntField(event, gInputOffsets.mValue, value);
env->SetLongField(event, gInputOffsets.mWhen,
(jlong)(nanoseconds_to_milliseconds(when)));
return res;
}
readEvent调用hub->getEvent读了取事件,然后转换成JAVA的结构。
事件中转线程
在frameworks/base/services/java/com/android/server/KeyInputQueue.java 里创建了一个线程,它循环的读取事件,然后把事件放入事件队列里。
Java代码:
Thread mThread = new Thread("InputDeviceReader") {
public void run() {
android.os.Process.setThreadPriority(
android.os.Process.THREAD_PRIORITY_URGENT_DISPLAY);
try {
RawInputEvent ev = new RawInputEvent();
while (true) {
InputDevice di;
// block, doesn't release the monitor
readEvent(ev);
boolean send = false;
boolean configChanged = false;
if (false) {
Log.i(TAG, "Input event: dev=0x"
+ Integer.toHexString(ev.deviceId)
+ " type=0x" + Integer.toHexString(ev.type)
+ " scancode=" + ev.scancode
+ " keycode=" + ev.keycode
+ " value=" + ev.value);
}
if (ev.type == RawInputEvent.EV_DEVICE_ADDED) {
synchronized (mFirst) {
di = newInputDevice(ev.deviceId);
mDevices.put(ev.deviceId, di);
configChanged = true;
}
}
android键盘映射之一相关推荐
- Android底层和中间层共同学习系列之android键盘映射
http://blog.csdn.net/hongjiujing/article/details/5016730 Android底层和中间层共同学习系列之android键盘映射 ...
- android键盘映射(转)-- good 1,android UI
1.我们只有在button2使用了layout_weight属性,并赋值为1:但是button1和button2并没有使用这个属性,根据API可以知道,他们的layout_weight属性等于0. 2 ...
- android+模拟器皮肤,自定义android模拟器皮肤和键盘映射
我想为Android模拟器创建自己的皮肤.我有照片购买了一些皮肤图像. 有一些额外的按钮,我需要映射,以便点击它时应该生成一个特定的事件. 在我的个性化皮肤文件夹的布局文件看起来是这样的:自定义and ...
- android 上键,在Android键盘上设置Return键
有没有人友好的编码器知道如何更改Android键盘的返回键上的文本.我正在捕获EditText元素的return事件以启动操作.所以我想向用户显示他可以用该键启动操作.一些应用程序这样做.例如.他 ...
- linux红外键盘映射表,linux下修改键盘映射
有段时间特别喜欢HHKB(一款适合专业人士使用的键盘),不过被它超高的价位给打败了.后来想想喜欢它的缘由有两个,第一就是它control键的位置,它的control键位于常规键盘的capslock键的 ...
- KEY键盘映射_手焊键盘,使用Python编写,一键放连招,还有什么你不会
本文转自公众号机器之心 这是一个内部运行 Python 的开源键盘,可根据个人需求定制键盘映射.从此以后,「穷苦玩家」也能在 MOBA 游戏里一键放连招了,不知这样算不算硬件外挂?「氪金玩家」请绕道. ...
- mac 使用Karabiner配置键盘映射(2)-核心标签的解读
2019独角兽企业重金招聘Python工程师标准>>> mac 使用Karabiner配置键盘映射(2)-核心标签的解读 KeyOverlaidModifier 使用场景:一般用在 ...
- apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard
apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard 想在苹果电脑 mac 系统下使用 机械键盘,大部分机械键盘不是为mac设计的,所 ...
- android 键盘点击事件监听事件,Android 键盘事件触发以及监听
一.Android 手动显示和隐藏软键盘 如果输入法在窗口上已经显示,则隐藏,反之则显示 InputMethodManager imm = (InputMethodManager) getSystem ...
最新文章
- 少儿编程python课程-选好课程很重要,极客晨星让孩子喜欢上少儿编程
- django(七)之数据库表的单表-增删改查QuerySet,双下划线
- openstack创建外网_OpenStack的女性谈论外展,教育和指导
- MEF董事、中国电信云计算中心主任赵慧玲:MEF第三类网络
- 黑马程序员-随笔-我与程序员
- 「星火计划沙龙视频」腾讯自研图数据库核心研发思路揭秘
- tiktok说查生日_TikTok对于Nadella的Microsoft来说似乎是危险的舞步
- 三大报再呼救市:A股估值到了崩溃边缘
- Jquery实现大于等于且小于等于-遁地龙卷风
- 服务器负载过高的处理方式
- 育碧信条:AI 在手,天下我有
- java 英文单词命名缩写_java程序员英文单词缩写和解释
- linux服务器odbc在哪看,在Linux上寻找odbc.ini和odbcinst.ini文件的良好文档
- 阿里云在家实践计划主机申请教程
- initializationError报错
- 2015年宏观经济总结和2016年猜想
- 2010计算机试题答案,2010全国计算机等级考试试题与答案公布
- 勒索软件对企业的重大威胁分析
- 创业的这1个盲点,竟让我白白烧了500多万!
- (学习笔记)微信小程序 -- WXML模板、WXSS样式、JS逻辑交互
热门文章
- 基于深度学习的视觉三维重建研究总结2进阶
- C# 手机号码归属地查询
- Matlab程序问题
- python完成文件夹批量word转pdf文件及pdf文件合并+word文件合并
- 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
- 【中文技术文档的写作规范_P03】如何书写标点符号和控制文档体系
- 云端搭建linux学习环境——手把手教学,赶紧收藏以后使用
- 2020.11.18第十三章 事件(事件处理程序;事件对象;事件类型:UI事件;焦点事件;鼠标与键盘事件 变动事件 模拟事件)
- 2022第二届中国ESG与可持续发展国际峰会将于11月17日-18日在上海举行
- 扫描识别工具Dynamic Web TWAIN使用教程:如何自定义Web TWAIN对象