曾经android 不支持virtual key。好像是2.0以后才有的virtual key的吧。virtual key顾名思义就是利用触摸屏的一个区域,模拟成按键,最终被android framework理解成按键事件。
再说说,那时候的项目背景。当时android2.0还没出来,公司也是对android比较感兴趣。其实公司对android并不是十分技术雄厚,很多东西都在总结和积累阶段。一天,上司说从日本来了一块电路板,基于imx35的。本来是没什么,就是为了学习android的。后来,经理不知怎么谈的,说做一个好一点的,去参加日本东京的展览会。这下急坏了底下的人。其中,最郁闷的是,该死的日本鬼子竟然板子上除了电源键,没有其他按键。
起初,很无奈,怀疑自己能不能完成这个课题。由于当时也是接触android不久,所以对framework理解不深,虽然在方案提出阶段,也有修改framework的考虑,但最终还是pass掉了。
自己有驱动的基础,基本上除了网络协议之外,其他驱动都有了解。最终,从android跟驱动的接口上下功夫了。
第一步,修改hal层,改变报告给framework的有效区域的大小,留出virtual key的空间。这样android在显示时,就不会把图像显示到virtual key上。 这个修改主要在hardware目录中。
第二步,增加虚拟按键驱动。在rootfs中设置一个配置文件,包含了位置和键码的对应关系。在虚拟按键驱动加载时,读入驱动的内核空间,驱动根据配置文件中的对应关系,当触摸了指定区域,向上发送对应键码。 虚拟按键驱动创建了一个按键类型的input节点,这样android就认识他了,自动读取按键事件。触摸屏的驱动也需要调整,把某些区域的坐标数据发送给按键驱动。
第三步,增加图片。虽然虚拟按键驱动可以完成功能,但是在virtual key区域是黑色的,什么也没有。这时需要一个daemon程序完成图片显示和切换。这个daemon程序,根据按键驱动发送来的键码,更新显示区域的图片。每个按键都有两幅图片,按下和抬起。首先,制作图片,使其大小跟virtual key区域匹配。其次,移植lib jpeg,利用这个库解压图片。最后,把解压后的数据写入framebuffer缓冲区。 这里有个问题,就是android的双缓冲机制,就是android 刷新屏幕时,对交替显示其中一个缓冲区。如果不注意这个机制,那么virtual
key的button图片就会闪烁,一会显示,一会变黑。所以就要在映射framebuffer的缓冲区时,把两个空间都映射进来,写的时候同时写。注意计算button在framebuffer缓冲区的起始位置。
经过这三步,在android1.6屏幕的下方,多了一个漂亮的control bar,可以控制android的行为,在不同的按键阶段显示不同的图片。
最终,这个项目得到日本公司的赞赏。
分享到:
相关推荐
VirtualApp is an open platform for Android that allows you to create a Virtual Space, you can install and run apk inside. Beyond that, VirtualApp is also a Plugin Framework, the plugins running on ...
js虚拟键盘, 带 拼音输入法,项目中可用
注册机注册码 Virtual virtual dj v1.6
This sample codes show how to get mouse virtual keys
hot virtual key oard 9.4 wmpj 新版本 hot virtual key oard 9.4 wmpj 新版本 hot virtual key oard 9.4 wmpj 新版本
Virtual Key Codes for vc programming,虚拟码
快手私信卡片android virtual虚拟机实现源码
滴滴VirtualApk的集成测试; 插件源码:https://github.com/didi/VirtualAPK
主要介绍了Android中Android Virtual Device(AVD)使用教程,本文还对使用过程中发生的一些错误给出了处理方法,需要的朋友可以参考下
Virtual Jaguar Atari Jaguar emulator http://shamusworld.gotdns.org/git/virtualjaguar Android port
Android-HomeKey-Locker Utility to disable HOME KEY in Android Activity. ...This library doesn't support devices with VIRTUAL HOME KEY, such as Galaxy Nexus Nexus 4 Nexus 5 Nexus 7 Demo
MultiKey x32 x64 Emulator Renamed (VirtualKey)
Android-VirtualApp.zip,Android虚拟引擎(商务版支持10.0),安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。
模拟器VirtualXposed_for_GameGuardian_0.20.3.apk Android最新版apk文件
Windows JDK 1.6 安装包,解压后直接双击安装,简单易用。 下面是Oracle官网对 Java 的介绍:Oracle Java is the #1 programming language and development platform. It reduces costs, shortens development time...
VirtualSoftKeys Overview A simple , safe and easy softKeys ( navigation bar). This project just was used for my device to solve hardware button problem. If you have any idea for any thing, please let ...
创建Android Virtual Device (AVD) 创建android应用,虚拟测试环境。
【Android 插件化】VirtualApp 编译运行 ( VirtualApp 简介 | 配置 VirtualApp 编译环境 | 编译运行 VirtualApp 官方示例 ) https://hanshuliang.blog.csdn.net/article/details/120754537 博客源码 , 2021年10月14...
Domic — Reactive Virtual DOM for Android Domic is an abstraction for Android UI layer that mirrors real Android DOM, but reactively. It allows you: Unify interactions with Android UI layer across ...
小红书私信卡片android virtual虚拟机实现源码