android键盘映射之一

转载 2012年03月31日 11:21:33

按键事件

对于按键事件,调用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 模拟器和PC物理键盘映射

  • 2010年12月21日 20:00
  • 5KB
  • 下载

android键盘映射(转)

原文网址:http://www.cnblogs.com/cnhome/archive/2009/12/22/1629435.html   按键事件 对于按键事件,调用mDevices...

更改 Android 设备的键盘映射

转自:http://xiaoxia.de/2011/06/change-key-layout-on-android/ framework/base/libs/ui/input.cpp 中有定义 ...

android键盘映射

转:http://blog.chinaunix.net/u3/90973/showart_2207472.htmlAndroid底层和中间层共同学习系列之android键盘映射 介绍 功能键布局映射 ...
  • eustoma
  • eustoma
  • 2011年06月07日 12:36
  • 899

android:添加usb键盘+按键布局和映射的修改

Android的用户输入系统,自下而上,分成如下部分: 1.驱动程序:/dev/input目录。负责report键值到上层。其中键值定义在input.h中; 2.根文件系统中,KeyLayou...
  • B_zhang
  • B_zhang
  • 2012年03月01日 10:44
  • 1758

android:添加usb键盘+按键布局和映射的修改

android下的按键布局和映射这个笔记整理一下使用usb键盘遇到的问题,比如添加usb键盘的keylayout,添加按键,修改按键映射等。本文参考了:http://blog.csdn.net/kie...

android:添加usb键盘+按键布局和映射的修改

android下的按键布局和映射 这个笔记整理一下使用usb键盘遇到的问题,比如添加usb键盘的keylayout,添加按键,修改按键映射等。 本文参考了: http://blog.cs...

android:添加usb键盘+按键布局和映射的修改

http://blog.csdn.net/doom66151/article/details/6575271 android下的按键布局和映射 这个笔记整理一下使用usb键盘遇到的问题,比如添...

Android Studio 模拟器对应键盘快捷键映射

Android Studio 模拟器对应键盘快捷键映射Android SDK2.0.1自带的虚拟机尺寸都比较小(不针对机型,只为了在PC上看的舒服一点,当然越大越好了,我最大设置成1050*450,但...

android接触--多输入设备字符映射,9键数字键盘

在一个月前,改了一个遥控器的按键。 那时候还不知道那个遥控器有什么功能,只是找到键值转换表,更新一下就OK了。 本来乱七八糟的键盘控制就变得正常起来了,在android中,按键事件的处理流程在网上...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android键盘映射之一
举报原因:
原因补充:

(最多只允许输入30个字)