曾经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的行为,在不同的按键阶段显示不同的图片。
最终,这个项目得到日本公司的赞赏。
分享到:
相关推荐
对于开发者来说,Android 1.6 SDK的更新还包括新的开发者工具,如改进的AVD(Android Virtual Device)管理器,方便开发者创建和管理模拟器实例。此外,Eclipse IDE与ADT(Android Development Tools)插件的集成也...
在实际项目中,使用"VirtualKey"这样的JS虚拟键盘,不仅可以提高输入效率,还能够解决某些特定环境下的输入问题,如防止恶意脚本注入,保护用户隐私等。然而,需要注意的是,虽然虚拟键盘提供了便利,但在安全性方面...
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 ...
【Mouse Virtual Key API Code】示例代码主要展示了如何在编程中获取鼠标虚拟键的相关操作。在计算机编程领域,尤其是在Windows操作系统环境下,理解鼠标虚拟键的概念和技术对于开发涉及到鼠标输入的应用程序至关...
注册机注册码 Virtual virtual dj v1.6
其次,"android virtual machine"指的是Android Virtual Device(AVD),它是Android Studio中的一个工具,用于模拟不同的Android设备,开发者可以在这个环境中测试和调试他们的应用程序。AVD允许开发者在不实际使用...
【Android-滴滴VirtualApk】是滴滴出行开源的一款强大的Android插件化框架,它允许开发者在不修改主应用的情况下,动态加载和卸载插件APK,极大地提升了应用的灵活性和可维护性。该框架的核心目标是实现动态更新、...
【Android代码-Virtual Jaguar】是关于在Android平台上运行Atari Jaguar游戏机模拟器的一个项目。这个项目名为Virtual Jaguar,它允许用户在Android设备上体验Atari Jaguar游戏机的经典游戏,无需实际拥有硬件设备。...
hot virtual key oard 9.4 wmpj 新版本 hot virtual key oard 9.4 wmpj 新版本 hot virtual key oard 9.4 wmpj 新版本
- **AVD(Android Virtual Device)**:用于创建和管理虚拟设备,进行应用测试和模拟不同硬件配置。 - **DDMS(Dalvik Debug Monitor Service)**:提供内存分析、线程监控、设备模拟等功能,便于调试。 5. **...
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
在“抖音卡片”这个场景下,"virtual"可能指的是一个定制化的虚拟机环境,用于优化播放卡片式的视频内容。这种虚拟机可能会有以下特点: 1. **轻量级**:为了保证流畅的用户体验,定制的虚拟机应该是高效的,占用...
Windows JDK 1.6 安装包,解压后直接双击安装,简单易用。 下面是Oracle官网对 Java 的介绍:Oracle Java is the #1 programming language and development platform. It reduces costs, shortens development time...
MultiKey x32 x64 Emulator Renamed (VirtualKey)
**qml-virtualkey: 纯QML应用内虚拟键盘详解** `qml-virtualkey` 是一个基于QML(Qt Quick)技术实现的轻量级虚拟键盘或游戏手柄组件,专为纯QML应用程序设计。它允许用户在无需依赖操作系统原生键盘的情况下,在...
模拟器VirtualXposed_for_GameGuardian_0.20.3.apk Android最新版apk文件
总的来说,VirtualApp的源码是一个极好的学习资源,它涵盖了Android应用开发的多个高级领域,如系统级编程、Hook技术、虚拟化等,对于提升Android开发者的技能和视野具有很大的帮助。通过深入研究,开发者可以了解到...
Android Virtual Device (AVD) 是Android开发中不可或缺的一部分,它是一个虚拟设备,用于在计算机上模拟真实的Android设备,让开发者能够在各种不同的硬件配置和系统版本上测试应用。AVD允许开发者创建多个虚拟设备...
Android-VirtualApp.zip,Android虚拟引擎(商务版支持10.0),安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。
JRE1.6包含了Java虚拟机(Java Virtual Machine, JVM)、类库和其他必要的组件,使得计算机能够解释并执行Java字节码。其中,JVM是Java平台的核心,它负责将Java代码转换为机器语言,从而在不同操作系统上运行。JRE...