有独立的安卓鼠标映射键盘按键键盘映射程序吗?我想移植到remix系统里玩游戏

RemixOS Player安卓虚拟机|RemixOS Player 安卓模拟器For Windows官方最新版-东坡下载
东坡下载:内容最丰富最安全的下载站!
→ RemixOS Player 安卓模拟器 For Windows官方最新版
技德科技Remix OS近日又发行了一款可以在windows上运行android应用的软件――RemixOS Player,它声称是目前最快优化最好的模拟器,因为它是用谷歌自己的Android Studio中的模拟器开发,体验非常好,还有一个键盘映射工具,可能用鼠标键盘来支持触摸的安卓游戏。RemixOS Player&安装教程再次重申硬件要求:存储容量 8GB 及以上,存储格式为 FAT32,且支持 USB 3.0 的闪存设备(建议写入速度大于 20MB/s)一台64位CPU的个人电脑首先下载所需文件:Remix OS PC版已经包含烧录工具前往官网下载||传送门下载后请核对MD5值Legacy版 MD5: 4d2913737ccef95ab474a47ae90ed673UEFI版 MD5: 99ef7f47cffa注意:备份好U盘重要数据1.格式化U盘在U盘盘符上单击右键――格式化选择文件系统为FAT32,勾选快速格式化。义无反顾的选择“是”吧格式化完成。2.烧录U盘双击烧录工具界面是这个样子的。在U盘处注意盘符为U盘。单击浏览选择下载好的ISO文件再次确认后盘符后点击“确定”开始写入U盘文件,耐心等候即可。可能会登上几分钟。烧录完成。你可以选择“现在重启3.电脑重启进入BIOS不同品牌和型号电脑进入 BIOS 菜单以及调整启动项的方法存在差异,请根据实际情况自行查阅下面是键盘分布图,电脑重启后狂按相应品牌机进入BIOS的快捷键。这里以DELL为例,狂按F2,进入BIOS后,把USB启动项调整至第一位。保存后电脑会重启进入Remix OS PC版。待系统启动后,选择“Guest Mode(访客模式)”或“Resident Mode(普通模式)”即可运行 Remix OS PC 版。4.开机注意事项:选择“Resident Mode”时,创建data.img时间会比较久,请耐心等待如果创建时间时间超过30分钟,可能由于U盘速度导致创建失败无法启动。请尝试&Guest Mode“或者更换读写速度更快的U盘。RemixOS Player使用注意1、 player支持uefi吗――支持,在虚拟机位置文件夹里的配置文件 (.vmx)用记事本打开,在文档中最后一行添加上firmware=ef保存关闭,编辑虚拟机设置,指定ISO镜像,启动你修改的虚拟机系统,首次启动ISO镜像需要指定类型,开机后按F2、F12或Esc进入BIOS,选择boot manager,根据情况选择,Windows镜像选择第一个,OS X选择第二个,然后正常启动2、win7支持UEFI吗――支持不良3、win8和win10哪个对硬件要求低?――win8,虚拟机流畅跑win10?算了吧4、一个硬盘两个分区可以不同格式吗?――可以5、Detecting Androidx86是什么鬼?――无数英雄死在这道上,非经验老到者无解~RemixOS Player软件特色RemixOS Player可以让用户在Windows当运行Android应用程序。RemixOS Player本质上来说是一款Android模拟器,虽然开发者声称它是一个最快和最优化的模拟器,它基于谷歌自己Android Studio中的模拟器,但是包含一些变化,使体验顺畅了很多。像其他Android模拟器,RemixOS Player让用户在Windows当中运行Android应用程序,而不会对Windows有任何负面影响,它还包括一个键盘映射工具,让用户用鼠标和键盘运行那些只支持触摸的Android游戏。RemixOS Player和RemixOS一样,用户都可以免费下载,用户只需下载RemixOS Player,运行其即可。
安卓官方手机版
IOS官方手机版
RemixOS Player 安卓模拟器截图
用过安卓手机或者安卓模拟器的朋友都知道,从网上下载下来的安卓软件都是apk格式的,这种格式的文件通常是无法直接在电脑上打开的,因为他是安卓系统的安装程序文件。要想在电脑上打开这种格式的文件,我们就需要在电...
中文 / 40.8M亲爱的米粉们,就在刚刚小米手机
中文 / 28.0M迅雷手机助手是迅雷官方开发的一
中文 / 17.3M搜狗手机助手是一款电脑端手机管
中文 / 17.7M360手机助手电脑版是android智能
中文 / 53.8M天翼手机助手是基于核心手机驱动
中文 / 33.1M百度手机助手PC版是百度推出的一
安卓模拟器是一个能在Windows平台模拟安卓手机系统的模拟器。安卓模拟器能在电脑上模拟出安卓手机运行环境,让你在电脑上也能体验安卓游戏和应用。如果你还没有安卓手机,那么可以先在电脑上安装一个安卓模拟器,它可...
中文 / 5.2M小鸡模拟器Windows版,一款全新的
中文 / 11.1MSALTO其实是XeroxAlto模拟器,翻
中文 / 11.0M东东手游助手电脑版可以在电脑上
多国语言[中文] / 7.8M以前一直想搞一个apk运行器,但找
中文 / 301.0M天天模拟器是一款可以让安卓应用
中文 / 131.7M畅玩安卓模拟器是一个可以让安卓
模拟器是指主要透过软件模拟硬件处理器的功能和指令系统的程序使计算机或者其他多媒体平台(掌上电脑,手机)能够运行其他平台上的软件。今天东坡特地为大家准备了一批模拟器下载,各式各样的模拟器都有,有安卓模拟...
中文 / 2.5M采矿许可证生成器,不仅仅只有一
中文 / 32.0M靠谱助手电脑版,让你快速体验最
多国语言[中文] / 9.2MBlueStacksAppPlayer是BlueStack
中文 / 18.2M苹果ios系统iphone模拟器是一个模
多国语言[中文] / 7.8M以前一直想搞一个apk运行器,但找
中文 / 257.2M海马玩模拟器是一款安卓模拟器产
RemixOS Player 安卓模拟器 For Windows官方最新版
本类最新软件
本类软件推荐
15.1M / 06-15 / 6.7.52.158 官方最新版 for 32/64位
29.2M / 05-28 / 2.5.42.1005.1官网最新版
492.0M / 05-24 / 8.3 官网最新版【网盘下载】
4.9M / 05-08 / 7.4.24.2017 正式版
23KB / 05-04 / 5.3 免费版
本类软件排行
本类软件必备
关机分区卸载U盘
请简要描述您遇到的错误,我们将尽快予以修正。
轮坛转帖HTML方式
轮坛转帖UBB方式RemixOS Player让用户在Windows上运行Android应用程序_网易手机
RemixOS Player让用户在Windows上运行Android应用程序
用微信扫码二维码
分享至好友和朋友圈
(原标题:RemixOS Player让用户在Windows上运行Android应用程序)
Android PC操作系统Remix OS的开发商今天宣布推出RemixOS Player,可以让用户在Windows当运行Android应用程序。RemixOS Player本质上来说是一款Android模拟器,虽然开发者声称它是一个最快和最优化的模拟器,它基于谷歌自己Android Studio中的模拟器,但是包含一些变化,使体验顺畅了很多。
像其他Android模拟器,RemixOS Player让用户在Windows当中运行Android应用程序,而不会对Windows有任何负面影响,它还包括一个键盘映射工具,让用户用鼠标和键盘运行那些只支持触摸的Android游戏。RemixOS Player和RemixOS一样,用户都可以免费下载,用户只需下载RemixOS Player,运行其exe文件即可。目前,它仅支持在Windows,之后可能会推出Mac版本。
[广告]活动入口:买美股,上老虎 - 超低佣金,每股只需1美分
本文来源:cnbeta网站
责任编辑:"王晓易_NE0011"
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈二合一平板/笔记本“Remix Pro”首次搭载了新的Remix OS 3操作系统,基于安卓6.0深度定制而来。
技德科技今天拿出了一款新的硬件设备&&二合一平板/笔记本Remix Pro。它首次搭载了新的Remix OS 3操作系统,基于安卓6.0深度定制而来。
Remix Pro由技德科技与Design Works团队合作设计,全镁合金机身,一体成型工艺,左右两侧机身腰线收敛,整体厚度只有6.9毫米(长宽289.5&207毫米,重量不过600克。
同时还可搭配Smart Cover镁合金全金属磁吸键盘(4.5毫米厚度460克重量),摇身变为笔记本。
它配备了一块分辨率的12寸屏幕,屏占比77%,表面覆盖康宁大猩猩第三代玻璃,内部配备骁龙652八核处理器、3GB LPDDR3内存、32GB eMMC内存(最大扩展256GB)、9000mAh电池、800万像素后置和500万像素前置摄像头、802.11ac Wi-Fi和蓝牙4.0网络。
接口提供USB Type-C/Type-A各一个,支持9V/2A快速充电,以及3.5毫米耳机孔一个。
上市时间和价格暂未公布。
此外,技德科技还与Acer、AOC等厂商合作,发布了基于Remix OS 3的游戏本和一体机。
与Acer合作的这款安卓游戏本搭载了Intel赛扬N3150处理器,4GB RAM以及500GB硬盘的配备足以畅玩任意一款Android游戏大作,11.6英寸屏幕也比绝大多数安卓设备拥有更加宽阔的视野,搭配鼠标和键盘的映射支持,1ms的响应时间对于快人一步畅玩安卓游戏起到了极大帮助。
Acer游戏本
Acer安卓游戏本拥有Remix OS/Windows双系统版本,目前搭载Remix OS系统的安卓游戏本已经上线开售,售价为2199元人民币,双系统版本正在后期完善中,上市时间暂未公布。
与AOC合作的Mars云端一体机
早在上个月便有消息称技德科技与显示器行业领导者AOC展开了紧密合作,但是合作内容并未公开,而在本次发布会上,我们也见到了技德与AOC的合作产品,Mars云端一体机。该系列包含多种型号和尺寸,采用目前高端智能电视上经常使用的Amlogic S905 四核心 64 位 ARM 处理器,搭配2GB RAM内存和 16GB/64GB 存储空间,辅以经过深度优化的 Remix OS 操作系统,使用体验非常出色。
Remix OS是技德科技旗下基于AOSP安卓开源项目深度定制的操作系统,支持平板机、一体机、智能显示器、笔记本、台式机等,兼容数百万安卓应用。
热门文章排行android 按键流程及映射 - CSDN博客
android 按键流程及映射
遇到要加一个新按键自己整理一下自己想要的东西
& & & & & & & & & & & & & & & & & & & & & &
android按键的映射是经过底层映射和上层映射两层映射来实现按键传递,驱动层映射为实体键映射为LINUX input.h上定义的键值,上层映射为底层将input.h里面的键值通过input设备传到上层后上层再映射到其他的键值。底层传到的键值在EVENTHUB.CPP文件的getevent事件里面可以接收到,然后在传到KeyLayoutMap.cpp的mapKey函数中进行上层的映射,在5.1的系统中上层的映射按键定义在InputEventLabels.h的头文件中定义,按键传送走的流程跟4.4的差不多。
再谈谈KL文件的作用:
android上层已经有按键事件的定义了,底层驱动也有按键事件上报。但是缺少了中间的对接层,也就是说哪个按键对应哪种事件还不清楚。所以,需要为它们加入一个布局文件。按键的布局文件存放在frameworks/base/data/keyboards目录下,以.kl为后缀的文件都是键盘的布局文件。那么编绎后我们可以在out/target/product/system/usr/keylayout文件夹中找到很多如果可缀为kl(布局)的文件,具体读取哪个布局文件是根据驱动的名字来确定的,如果找不到与驱动名字相同的文件,就会读取默认文件Generic.kl。现在我们假设键盘在驱动层的名字为“my_keypad”,所以需要创建一个名为“my_keypad,kl”的布局文件。
在keyboard.cpp中的文件中,有下函数解析到底使用那个名字的KL文件
&status_t KeyMap::load@frameworks/base/libs/androidfw/keyboard.cpp&
& & & & if (deviceConfiguration) {
& & & & & & String8 keyLayoutN
& & & & & & if (deviceConfiguration-&tryGetProperty(String8(&keyboard.layout&),
& & & & & & & & ....
& & & & // Try searching by device identifier.
& & & & if (probeKeyMap(deviceIdenfifier, String8::empty())) {
& & & & return OK;
& & & & // Fall back on the Generic key map.
& & & & // TODO Apply some additional heuristics here to figure out what kind of
& & & & // & & &generic key map to use (US English, etc.) for typical external keyboards.
& & & & if (probeKeyMap(deviceIdenfifier, String8(&Generic&))) {
& & & & return OK;
& & & & // Try the Virtual key map as a last resort.
& & & & if (probeKeyMap(deviceIdenfifier, String8(&Virtual&))) {
& & & & return OK;
& & &#getevent -i
& & add device 2: /dev/input/event7
& & & bus: & & &0000
& & & vendor & &0000
& & & product & 0000
& & & version & 0000
& & & name: & & &msm8226-tapan-snd-card Button Jack&
& & & location: &ALSA&
& & & id: & & & &&
& & & version: &1.0.1
& & & events:
& & & & KEY (0001): 00e2 & & & &0107&
& & & input props:
& & & & &none&
& & 读取*.kl的名字组合顺序为&
&& &a. 首先查看 props中是否有keyboard.layout的参数,如果有则读取该名字的kl文件
&& &b. 如果 该设备的vendor,product和version都不全为0,则通过它们的组合成 kl的文件名
&& &&& &Vendor_%04x_Product_%04x_Version_%04x.kl
&& &&& &Vendor_%04x_Product_%04x.kl
&& &&& &最终形成文件路径system/usr/keylayout/Vendor_xxxx_Product_xxxx.kl或system/usr/keylayout/Vendor_xxxx_Product_xxxx_Version_xxxx.kl
&& &c. 如果vendor,product,version都为0,则通过该设备的name: &msm8226-tapan-snd-card Button Jack&来组合kl文件名
&& &&& &appendInputDeviceConfigurationFileRelativePath中会把其中的空格转换成'_'
&& &&& &最终形成文件路径system/usr/keylayout/msm8226-tapan-snd-card_Button_Jack.kl
再接下来讲讲android的按键传输流程
由于看到一篇我觉得不错的文章我就决定转载文章:
 一、Android底层事件处理过程&&&
在系统启动后,在文件。。。中,android 会通过&&& static const char *device_path = &/dev/input&;&
&&& bool EventHub::penPlatformInput(void)&
&&& res = scan_dir(device_path);&&& 通过下面的函数打开设备。
&&& int EventHub::pen_device(const char *deviceName)&
&&&&& ...&
&&&&& fd =&(deviceName,
&&&&& ...&&
&&&&& mFDs[mFDCount].fd =&
&&&&& mFDs[mFDCount].events = POLLIN;&
&&&&& ...&
&&&&& ioctl(mFDs[mFDCount].fd, EVIOCGNAME(sizeof(devname)-1), devname);&
&&&&& ...&
&&&&& const char* root = getenv(&ANDROID_ROOT&);&
&&&&& snprintf(keylayoutFilename, sizeof(keylayoutFilename),&
&&&&&&&&&&&&&&&& &%s/usr/keylayout/%s.kl&, root, tmpfn);&
&&&&& ...&
&&&&& device-&Map-&load(keylayoutFilename);&
&&&&& ...&
& }& 打开设备的时候,如果 device-&classes&CLASS_KEYBOARD 不等于 0 表明是键盘。&
& 常用的定义有:&
&&&&&&& CLASS_KEYBOARD&&&&& = 0x, //键盘&
&&&&&&& CLASS_ALPHAKEY&&&&& = 0x, //&
&&&&&&& CLASS_TOUCHSCREEN&& = 0x, //触摸屏&
&&&&&&& CLASS_TRACKBALL&&&& = 0x& //轨迹球&
& };& 打开设备的时候通过上面的
ioctl 获得设备名称,命令字 EVIOCGNAME 的定义在文件:&&& kernel/include/linux/input.h 中。
& 对于按键事件,调用mDevices-&layoutMap-&map进行映射,调用的是文件 KeyLayoutMap.cpp& (frameworks\\libs\ui)中的函数:
& status_t KeyLayoutMap::load(const char* filename)通过解析 &Driver name&.kl 把的&
映射关系保存在 :KeyedVector&int32_t,Key& m_ 中。& 当获得按键事件以后调用: status_t KeyLayoutMap::map(int32_t scancode, int32_t& *keycode, uint32_t *flags)
& 由映射关系 KeyedVector&int32_t,Key& m_keys 把扫描码转换成andorid上层可以识别的按键。
  二、按键映射&& Key&&maps的路径是
/system/usr/keylayout,第一个查找的名字是按键驱动的名字,例如& mxckpd.kl。如果没有的话,默认为qwerty.kl。
& Key character maps的路径是 /system/usr/keychars,第一个查找的名字是按键驱动的名字,例如& mxckpd.kcm。如果没有的话,默认为qwerty.kl。
& qwerty.kl是 UTF-8类型的,格式为:key SCANCODE KEYCODE [FLAGS...]。
& SCANCODE表示扫描码;
& KEYCODE表示键值,例如HOME,BACK,1,2,3...
& FLAGS有如下定义:
&&& SHIFT: While pressed, the shift key modifier is set&
&&& ALT: While pressed, the alt key modifier is set&
&&& CAPS: While pressed, the caps lock key modifier is set&
&&& WAKE: When this key is pressed while the device is asleep, the device will&&&&&&&&&&&&&&&&& wake up and the key event gets sent to the app.&
&&& WAKE_DROPPED: When this key is pressed while the device is asleep, the device&&&&&&&&&&&&&&&&& will wake up and the key event does not get sent to the app
& qwerty.kcm文件为了节省空间,在编译过程中会用工具makekcharmap转化为二进制文件qwerty.bin。三、按键分发&& 1、输入事件分发线程
&&& 在frameworks//services//com/android//WindowManagerService.java里创&&&
建了一个输入事件分发线程,它负责把事件分发到相应的窗口上去。
&&& 在WindowManagerService类的构造函数WindowManagerService()中:
&&&&&&& mQueue = new KeyQ(); //读取
&&&&&&& mInputThread = new InputDispatcherThread();& //创建分发线程&&&&&
&&&&&&& ...&&&&&
&&&&&&& mInputThread.start();
&&& 在启动的线程InputDispatcherThread中:
&&&&&&& run()&
&&&&&&& process();&
&&&&&&& QueuedEvent ev = mQueue.getEvent(...)&
&&&&& 在process() 方法中进行处理事件:
&&&&&&& switch (ev.classType)&
&&&&&&&&& case RawInputEvent.CLASS_KEYBOARD:&
&&&&&&&&&&&& ...&
&&&&&&&&&&&& dispatchKey((KeyEvent)ev.event, 0, 0);&
&&&&&&&&&&&& mQueue.recycleEvent(ev);&
&&&&&&&&&&&&&
&&&&&&&&& case RawInputEvent.CLASS_TOUCHSCREEN:&
&&&&&&&&&&&& //Log.i(TAG, &Read next event & + ev);&
&&&&&&&&&&&& dispatchPointer(ev, (MotionEvent)ev.event, 0, 0);&
&&&&&&&&&&&&&
& &&&&&& case RawInputEvent.CLASS_TRACKBALL:
&&&&&&&&&&&& dispatchTrackball(ev, (MotionEvent)ev.event, 0, 0);
&&&&&&&&&&&&
&&&&&&&&&&&&&
& 2、上层读取的流程&&&&
WindowManagerService()& //(frameworks\\services\\com\android\server&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
\WindowManagerService.java)
&&& KeyQ()& //KeyQ 是抽象类 KeyInputQueue 的实现
&&& InputDeviceReader //在 KeyInputQueue 类中创建的线程&
&&& readEvent()& //
&&& android__KeyInputQueue_readEvent()
//frameworks\base\services\jni\&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& com_android_server_KeyInputQueue.cpp
&&& hub-&getEvent()
&&& EventHub::getEvent() //frameworks\\libs\ui\EventHub.cpp
  res = read(mFDs.fd, &iev, sizeof(iev)); //
  Android的应用不仅仅是,MID,phone,还可以放到STB机顶盒,智能家庭终端上面去,所以的映射是一定要自定义的,不管按键是固定在设备上,还是通过无线设备还是蓝牙遥控,都需要键的映射。
&&&&&& Android也是基于Linux的核心,大部分时候都是操作系统在调度任务,执行任务。相应的,Android输入系统也是遵循LINUX的input输入输出子系统,关于这部分的分析可以Google,有许多原理方面的分析。Android使用标准的Linux输入事件设备(/dev/event0),驱动描述可以查看内核树头文件include/linux/input.h。如果想深入学习Linux input subsystem,可以访问:;a=f=Documentation/input/input.txt
  注:event0是您的keypad/gpio-key注册到内核的节点号,如果有其他的注册进内核,也可以是event1。
  功能性
  Android输入事件设备,用的是中断(硬件触发)或者轮询结构(软件模拟),捕获设备具体的扫描码,通过input_event()转化成标准的内核可接受的事件。
& 键映射驱动的其他主要驱动是建立一个probe函数,用于注册中断或者您的软件模拟的轮询功能函数,硬件初始化,用input_register_device()注册驱动/设备到输入输出系统。
& 注:关于probe属于linux设备驱动模型相关知识,可以阅读LDD3或者LINUX设备驱动原理与实践,有很详细的描述。
  下面表描述了从键盘输入最终转成相应应用行为的转化步骤
  步骤&&&&&&&&&&&&&&&&&&&&&&&&&&& 行为&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 解释&
1&&&&&&&&&&&&&&&&&&& 窗口管理器从Linux驱动获取键盘事件&&&&&&&&&&&&&&&&&&&&&&&&&&&&&消息不指定任何逻辑事件,它只与其硬件位置有关,
也就是说,按键的键盘码没有任何软件含义,映射键盘码
2&&&&&&&&&&&&&&&&&&& 窗口管理器映射扫描码为键码。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 当窗口管理器从驱动读到一个键,它利用那个键布局映射文件将扫描码映射为键值。特别的,这个键值就是屏幕显示的条码。例如
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& KEYCODE_DPAD_CENTER是导航五位键的中间的键,即使ALT+G产生一个&?&字符,事实上KEYCODE_G就是这个键值。
  3&&&&&&&&&&&&&&&&&&&&&&&&&& 窗口管理器发送扫描码和键码到应用程序`&&&&&&&&&&&&&&&&&&&&&&&&&&& 扫描码和键码被当前焦点所在界面处理,具体&翻译&要看具体的应用场合。&&
  键布局映射
  如何选择一个键布局映射文件
键布局映射文件通常放在/system/usr/keylayout和//usr/keylayout
  对于每一个键盘设备xxx,设置系统属性android.key.xxx,如果没有为自己的硬件设备创建一个特定的设备,Android将去读/system/usr/keylayout/qwerty.kl这个配置文件。
  注:如果设置系统属性,请查看ttp:///android_pdk/l
  Android键盘的默认配置路径是sdk/emulator/keymaps
  有两个最重要的文件:
  qwerty.kl 默认的KeyLayout文件,是映射物理矩阵的ScanCode到系统的KeyCode的一个关系。这个需要我们事先知道我们的键盘矩阵值。如果厂家不提供,就自己一个一个Log打印。
  这个文件的格式,很多网络的资料都提供,可以了解下。下面只简单的说明
  key 158&& BACK&&&&&&&&&&&&&&&&&& WAKE_DROPPED
key 230&& SOFT_RIGHT&&&&&&& WAKE
  第一列Key 表示一行有效的开始,注释行用#开头
  第二列表示Scancode ,是键盘物理设备的矩阵扫描码值
  第三列表示系统里面的按键码Keycode,这样物理键盘和操作系统就对应起来了。
  第四列表示KeyCode的Flag信息,可有可无,一般有三种状态
  空&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 没有附加信息
  WAKE&&&&&&&&&&&&&&&&&&&&&&&& 当机器处理Sleep状态,可以唤醒,按键信息继续被处理
  WAKE_DROPPED&&&&&&& 当机器处于Sleep状态,可以唤醒,但是丢弃信息
  这里是一一映射的关系。需要根据键盘的不同来处理。
  如果是正规的做法,ScanCode对应键盘值在不同的国家中时不会变的,例如常用的US键盘。但是有时没有UK的矩阵,只能用US的,
  这个时候就需要我们软件去更改这个ScanCode和KeyCode的映射关系。严重不推荐这种非标准化做法。
文件格式:
键映射文件通常以UTF8文本文件格式存储于设备,通常有如下特性:
注释:用#表示,以#开头的内容都将被忽略。
空白:所有的空行被忽略
键定义:键定义遵循如下格式key SCANCODE KEYCODE [FLAGS...],当扫描码是一个数字,键码定义在你描述的布局文件android.key.xxx,另外可以设置相关的FLAGS:
SHIFT: 当按下,自动加上SHIFT键值
ALT:当按下,自动加上ALT
CAPS:当按下,自动带上CAPS大写
WAKE:当按下,当设备进入睡眠的时候,按下这个键将唤醒,而且发送消息给应用层。
WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。
  映射文件示例:
android/src/device/product/generic/tuttle2.kl
# Copyright 2007 The Android Open Source Project
  key 2&&&& 1
key 3&&&& 2
key 4&&&& 3
key 5&&&& 4
key 6&&&& 5
key 7&&&& 6
key 8&&&& 7
key 9&&&& 8
key 10&&& 9
key 11&&& 0
key 158&& BACK&&&&&&&&&&&&& WAKE_DROPPED
key 230&& SOFT_RIGHT&&&&&&& WAKE
key 60&&& SOFT_RIGHT&&&&&&& WAKE
key 107&& ENDCALL&&&&&&&&&& WAKE_DROPPED
key 62&&& ENDCALL&&&&&&&&&& WAKE_DROPPED
key 229&& MENU&&&&&&&& WAKE_DROPPED
key 59&&& MENU&&&&&&&& WAKE_DROPPED
key 228&& POUND
key 227&& STAR
key 231&& CALL&&&&&&&&&&&&& WAKE_DROPPED
key 61&&& CALL&&&&&&&&&&&&& WAKE_DROPPED
key 232&& DPAD_CENTER&&&&&& WAKE_DROPPED
key 108&& DPAD_DOWN&&&&&&&& WAKE_DROPPED
key 103&& DPAD_UP&&&&&&&&&& WAKE_DROPPED
key 102&& HOME&&&&&&&&&&&&& WAKE
key 105&& DPAD_LEFT&&&&&&&& WAKE_DROPPED
key 106&& DPAD_RIGHT&&&&&&& WAKE_DROPPED
key 115&& VOLUME_UP
key 114&& VOLUME_DOWN
key 116&& POWER&&&&&&&&&&&& WAKE
key 212&& SLASH
  key 16&&& Q
key 17&&& W
key 18&&& E
key 19&&& R
key 20&&& T
key 21&&& Y
key 22&&& U
key 23&&& I
key 24&&& O
key 25&&& P
  key 30&&& A
key 31&&& S
key 32&&& D
key 33&&& F
key 34&&& G
key 35&&& H
key 36&&& J
key 37&&& K
key 38&&& L
key 14&&& DEL
key 44&&& Z
key 45&&& X
key 46&&& C
key 47&&& V
key 48&&& B
key 49&&& N
key 50&&& M
key 51&&& COMMA
key 52&&& PERIOD
key 28&&& ENTER&
key 56&&& ALT_LEFT
key 42&&& SHIFT_LEFT
key 215&& AT
key 57&&& SPACE
key 53&&& SLASH
key 127&& SYM
key 100&& ALT_LEFT
  key 399&& GRAVE
键字符映射:
键字符映射位于:/system/usr/keychars和//usr/keychars!
比如对于一个特定的设备xxx,设置android.keychar.xxx系统属性,用全路径表示去描述所需的键字符映射。如果你没有描述任何一个键字符映射,系统将默认使用/system/usr/keychar/qwerty.kl!
注:这一点可以在开发板接USB KEYBOARD的时候,将logcat打开看调试信息,会看到default to qwerty.kl类似的信息。
文件格式:
键字符映射文件以二进制减少加载时间的形式存储于设备中,键字符映射文件有如下特征:
注释:以#开始为注释
空行:所有的空行被忽略
列定义:当一个事件来临的时候按下组合键。这个事通常是MODIFIER_SHIFT,MODIFIER_CTRL,MODIFIER_ALT的组合。
O&&&&&&&&&&&&&&&&&&&& no modifiers
S&&&&&&&&&&&&&&&&&&&& MODIFIER_SHIFT
C&&&&&&&&&&&&&&&&&&&& MODIFIER_CONTROL
L&&&&&&&&&&&&&&&&&&&& MODIFIER_CAPS_LOCK
A&&&&&&&&&&&&&&&&&&&& MODIFIER_ALT
键值定义:键值定义遵循如下规则:
键 扫描码 字符[....]
扫描码和字符通常是一个十进制的值或者是UTF8字符,可以通过strtol的解析。
  键字符文件的示例:
下面这个文件来自于Android/src/device/product/generic/tuttle2.kcm,代表了一个完整的键字符文件。
以type开始的语句描述了你所要描述键盘的类型,大体分为三种
1:NUMERIC,12键的数字键盘
2:Q14:键盘包括所有的字符,但是可以一键多个字符。
3:QWERTY键盘包括了所有可能的字符和数字,类似于全键盘。
下面是一个QWERTY全的定义示例,因为android主要用于手机,手机一般是全键。
# Copyright 2007 The Android Open Source Project
  [type=QWERTY]
  # keycode&&&&&&
caps&&& fn&&&&& caps_fn number& display_label
  A&&&&&&&&&& 'a'&&&& 'A'&&&& '%'&&&& 0x00&&& '%'&&&& 'A'
B&&&&&&&&&& 'b'&&&& 'B'&&&& '='&&&& 0x00&&& '='&&&& 'B'
C&&&&&&&&&& 'c'&&&& 'C'&&&& '8'&&&& 0x00E7& '8'&&&& 'C'
D&&&&&&&&&& 'd'&&&& 'D'&&&& '5'&&&& 0x00&&& '5'&&&& 'D'
E&&&&&&&&&& 'e'&&&& 'E'&&&& '2'&&&& 0x0301& '2'&&&& 'E'
F&&&&&&&&&& 'f'&&&& 'F'&&&& '6'&&&& 0x00A5& '6'&&&& 'F'
G&&&&&&&&&& 'g'&&&& 'G'&&&& '-'&&&& '_'&&&& '-'&&&& 'G'
H&&&&&&&&&& 'h'&&&& 'H'&&&& '['&&&& '{'&&&& '['&&&& 'H'
I&&&&&&&&&& 'i'&&&& 'I'&&&& '$'&&&& 0x0302& '$'&&&& 'I'
J&&&&&&&&&& 'j'&&&& 'J'&&&& ']'&&&& '}'&&&& ']'&&&& 'J'
K&&&&&&&&&& 'k'&&&& 'K'&&&& '&'&&&& '~'&&&& '&'&&&& 'K'
L&&&&&&&&&& 'l'&&&& 'L'&&&& '''&&&& '`'&&&& '''&&&& 'L'
M&&&&&&&&&& 'm'&&&& 'M'&&&& '&'&&&& 0x00&&& '&'&&&& 'M'
N&&&&&&&&&& 'n'&&&& 'N'&&&& '&'&&&& 0x0303& '&'&&&& 'N'
O&&&&&&&&&& 'o'&&&& 'O'&&&& '('&&&& 0x00&&& '('&&&& 'O'
P&&&&&&&&&& 'p'&&&& 'P'&&&& ')'&&&& 0x00&&& ')'&&&& 'P'
Q&&&&&&&&&& 'q'&&&& 'Q'&&&& '*'&&&& 0x0300& '*'&&&& 'Q'
R&&&&&&&&&& 'r'&&&& 'R'&&&& '3'&&&& 0x20AC& '3'&&&& 'R'
S&&&&&&&&&& 's'&&&& 'S'&&&& '4'&&&& 0x00DF& '4'&&&& 'S'
T&&&&&&&&&& 't'&&&& 'T'&&&& '+'&&&& 0x00A3& '+'&&&& 'T'
U&&&&&&&&&& 'u'&&&& 'U'&&&& '&'&&&& 0x0308& '&'&&&& 'U'
V&&&&&&&&&& 'v'&&&& 'V'&&&& '9'&&&& '^'&&&& '9'&&&& 'V'
W&&&&&&&&&& 'w'&&&& 'W'&&&& '1'&&&& 0x00&&& '1'&&&& 'W'
X&&&&&&&&&& 'x'&&&& 'X'&&&& '7'&&&& 0xEF00& '7'&&&& 'X'
Y&&&&&&&&&& 'y'&&&& 'Y'&&&& '!'&&&& 0x00A1& '!'&&&& 'Y'
Z&&&&&&&&&& 'z'&&&& 'Z'&&&& '#'&&&& 0x00&&& '#'&&&& 'Z'
  COMMA&&&&&& ','&&&& ';'&&&& ';'&&&& '|'&&&& ','&&&& ','
PERIOD&&&&& '.'&&&& ':'&&&& ':'&&&& 0x2026& '.'&&&& '.'
AT&&&&&&&&& '@'&&&& '0'&&&& '0'&&&& 0x2022& '0'&&&& '@'
SLASH&&&&&& '/'&&&& '?'&&&& '?'&&&& '/'&&&& '/'&&&& '/'
  SPACE&&&&&& 0x20&&& 0x20&&& 0x9&&&& 0x9&&&& 0x20&&& 0x20
NEWLINE&&&& 0xa&&&& 0xa&&&& 0xa&&&& 0xa&&&& 0xa&&&& 0xa
  # on pc keyboards
TAB&&&&&&&& 0x9&&&& 0x9&&&& 0x9&&&& 0x9&&&& 0x9&&&& 0x9
0&&&&&&&&&& '0'&&&& ')'&&&& ')'&&&& ')'&&&& '0'&&&& '0'
1&&&&&&&&&& '1'&&&& '!'&&&& '!'&&&& '!'&&&& '1'&&&& '1'
2&&&&&&&&&& '2'&&&& '@'&&&& '@'&&&& '@'&&&& '2'&&&& '2'
3&&&&&&&&&& '3'&&&& '#'&&&& '#'&&&& '#'&&&& '3'&&&& '3'
4&&&&&&&&&& '4'&&&& '$'&&&& '$'&&&& '$'&&&& '4'&&&& '4'
5&&&&&&&&&& '5'&&&& '%'&&&& '%'&&&& '%'&&&& '5'&&&& '5'
6&&&&&&&&&& '6'&&&& '^'&&&& '^'&&&& '^'&&&& '6'&&&& '6'
7&&&&&&&&&& '7'&&&& '&'&&&& '&'&&&& '&'&&&& '7'&&&& '7'
8&&&&&&&&&& '8'&&&& '*'&&&& '*'&&&& '*'&&&& '8'&&&& '8'
9&&&&&&&&&& '9'&&&& '('&&&& '('&&&& '('&&&& '9'&&&& '9'
  GRAVE&&&&&&&& '`'&&&& '~'&&&& '`'&&&& '~'&&&& '`'&&&& '`'
MINUS&&&&&&&& '-'&&&& '_'&&&& '-'&&&& '_'&&&& '-'&&&& '-'
EQUALS&&&&&&& '='&&&& '+'&&&& '='&&&& '+'&&&& '='&&&& '='
LEFT_BRACKET& '['&&&& '{'&&&& '['&&&& '{'&&&& '['&&&& '['
RIGHT_BRACKET ']'&&&& '}'&&&& ']'&&&& '}'&&&& ']'&&&& ']'
BACKSLASH&&&& '/'&&&& '|'&&&& '/'&&&& '|'&&&& '/'&&&& '/'
SEMICOLON&&&& ';'&&&& ':'&&&& ';'&&&& ':'&&&& ';'&&&& ';'
APOSTROPHE&&& '''&&&& '&'&&&& '''&&&& '&'&&&& '''&&&& '''
STAR&&&&&&&&& '*'&&&& '*'&&&& '*'&&&& '*'&&&& '*'&&&& '*'
POUND&&&&&&&& '#'&&&& '#'&&&& '#'&&&& '#'&&&& '#'&&&& '#'
PLUS&&&&&&&&& '+'&&&& '+'&&&& '+'&&&& '+'&&&& '+'&&&& '+'
这里第一列KeyCode就是我们通过.kl文件的ScanCode转换过来的了。
  KeyCode& 提供给系统的KeyCode
  display&&&& 键盘上显示的字符(丝印)
  number&&& 一般不需要
  base&&&&&&& 不使用组合键默认显示的字符
  caps&&&&&&&& Shift + 按键&&&&&&&&&&& 显示的字符
  fn&&&&&&&&&&&& Alt&&& + 按键&&&&&&&&&&& 显示的字符
  caps_fn&&& Shift +Alt+&&&&&
显示的字符
  其中,caps,fn,caps_fn都可以通过Unicode码制来表示。例如你可以写
  'A',也可以写0x41.
  一般中会有很多的组合键,可能会碰见各种奇怪的字符,这里我列举以下字符,他们的Unicode可以通过
  复制你所需要的字符,然后可以查询到字符对应的Unicode码制。
  资源二进制格式
  上面所描述的一段通过makekcharmap工具转换成下面的格式,用户可以通过mmap这个文件,用于进程之间共享大概4K数据,可以节省加载时间。
Offset&&&&&&&&&&&&& Size (bytes)&&&&&&&&&&&&& Description
0x00-0x0b&&&&&&&&&&&&&&&&&&&&&&&&&&&& The ascii value &keycharmap1& including the null character
0x0c-0x0f&&&&&&&&&&&&&&&&&&&&&&&&&&&& padding
0x10-0x13&&&&&&&&&&&&&&&&&&&&&&&&&&&& The number of entries in the modifiers table (COLS)
0x14-0x17&&&&&&&&&&&&&&&&&&&&&&&&&&&& The number of entries in the characters table (ROWS)
0x18-0x1f&&&&&&&&&&&&&&&&&&&&&&&&&&&& padding
&&&&&&&&&&&&&&& 4*COLS&&&&&&&&&&&&&&&& Modifiers table. The modifier mask values that each of the columns in the characters table correspond to.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& padding to the next 16 byte boundary
&&&&&&&&&&&&&&& 4*COLS*ROWS&&&&&&&& Characters table. The modifier mask values that each of the columns correspond to.
以上转载文章出处/linux/1607199.html
参考文章:http://blog.csdn.net/a/article/details/6672523
& & & & & & & & &&http://www.android100.org/html//3577.html
& & & & & & & & &/bluesky_07_06_1/blog/static/7/
& & & & & & & &&/linux/1607199.html
本文已收录于以下专栏:
相关文章推荐
预备基础知识:
/porting/keymaps_keyboard_input.html
http://blog.csdn.net/skdev/a...
[原]Android中对标准内核的按键映射-Android按键驱动
Linux内核的平台代码的按键定义如下:
/* GPIO_KEY for Tablet */...
安卓系统按键映射修改
谨记录下靠着自己摸索,安卓平板使用时一个bug的解决方案,及修改按钮功能的方法。这个bug目前搜不到解决方案,能独立解决还是很有成就感的
解决反复打开谷歌语音搜索的bug
关于Android的蓝牙编程,与下位机通信demo ,还有详细注释。若真需要源代码工程文件,请在评论处留言。...
遥控器发一个扫描码,扫描码会经过kl文件的映射,每个设备可以有自己对应的kl文件,如果没有对应的kl文件则使用系统默认的Generic.kl文件
1 查看输入设备和kl文件名的对应关系
Android下添加新的自定义键值和按键处理流程
说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一个问题,请你...
转载:http://blog.csdn.net/louiswangbing/article/details/6610953
http://hi.chinaunix.net/?uid-217472...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 鼠标映射键盘 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信