Wine与安卓手机软键盘输入的整合方法

文档序号:6427019阅读:2225来源:国知局
专利名称:Wine与安卓手机软键盘输入的整合方法
技术领域
本发明涉及移动通信领域,尤其涉及Wine与安卓手机软键盘输入的整合方法。
背景技术
以手机为代表的智能化移动终端设备既是计算机技术的一个重要发展方向,又是一个竞争十分激烈的市场。自从谷歌公司和开放手机联盟推出Android操作系统和基于 Androuid的手机以来,很快就在世界手机市场上占有了不小的份额,各种Android手机层出不穷,由中国移动开发并推出的OPhone也是一种Android手机。所谓Android操作系统,实际上是对Linux操作系统的一种改编和扩充,它的内核基本上就是Linux的内核,但是在用户空间却专门针对手机和移动终端设备的特点作了大幅的改进和增强,这些改动大都与编程模式和图形界面,即图形化用户界面(GUI)有关。另一种常用于手机的操作系统是微软的WinCE和WM (Windows Mobile),这是在微软的Windows操作系统上发展起来的。基于WinCE/WM的手机也在市场上占不小的份额,并且开发出了数量不小的WinCE/WM应用软件。如果能把这些应用软件拿到Android手机上运行,对于提高Android手机的市场占有率显然是有利的。Wine是一款优秀的Linux系统平台下的模拟器软件,用来将Windows系统下的软件在Linux系统下稳定运行,该软件更新频繁,日臻完善,可以运行许多大型Windows系统下的软件。当把Wine移植到ARM架构的Linux平台上以后,WinCE/WM应用软件已经可以在 Wine的支持下在采用ARM处理器的Linux平台上运行,同样也可以在Android平台运行。在带图形界面的Linux操作系统中,有关图形界面的功能都是由X视窗系统提供的,输入法也是图形界面功能的一部分。运行着应用软件的进程都不直接读取键盘输入,而只是通过进程间通信从X服务进程获取输入。人机交互的输入先由本系统中唯一的X服务进程读取,由X服务进程统一加以前期的处理,然后根据屏幕上光标的当前位置以及当前处于“聚焦”状态的视窗配送给合适的进程/线程。X视窗属于另一个开源软件项目,早在Unix时代即已存在。由于Linux系统大多离不开图形界面,X视窗实际上已经成了 Linux操作系统的一部分。为适应手机和其它嵌入式系统的需要,人们还将X视窗加以裁剪、缩编、简化,成为一个小型化的版本称为TinyX, 所以TinyX是专门与嵌入式Linux配对使用的X视窗系统。然而,与常规的Linux平台不同,Android/OMS平台不使用TinyX,也不支持依靠X 视窗服务进程(Xserver)提供⑶I的Linux应用。在Android/OMS平台上,所有来自键盘和鼠标器的输入全部为一个“窗口管理器”线程所截获,再由这个线程分发给当前正在运行的“应用(Activity)”。这样就引出了如何整合Wine和Android/OMS的键盘输入问题。因为TinyX和Android将会争抢来自键盘和鼠标器的输入,也会各自为政地往屏幕上画图。为解决Wine与Android/OMS软键盘输入整合的问题,原有的中国移动的程序模型是在运行WinCE/WM应用时,在Android也启动一个Java进程作为Wine的代理, 称为win印roxy,并使得来自键盘/鼠标器的输入统一由Android加以截获,将其交给win印roxy,而后者将来自键盘/鼠标器的输入转发给Xserver。通过这样一种消息传递方式,保证消息的单向流通,避免发生消息多重传递而引发的混乱与冲突。然而这个方案以及后来提出的验证原型,在实际上还有很多问题需要解决,其中最重要的是在什么时候要(在屏幕上)弹出软键盘、什么时候又不应该弹出软键盘的问题。

发明内容
针对现有技术中存在的上述问题,本发明提供了 Wine与安卓手机软键盘输入的整合方法。本发明提供了 Wine与安卓手机软键盘输入的整合方法,包括步骤1,当发生软键盘事件时,Wine代理向X视窗服务进程发出事件通知;步骤2,X视窗服务进程按照预定的格式对事件通知进行转换后,将转换后的事件通知发送至Winexll. drv中的键盘/鼠标器输入处理程序;步骤3,Winexll. drv将软键盘事件上交到公共控件管理模块,公共控件管理模块决定弹出软键盘;步骤4,X视窗服务进程将来自Wine的弹出软键盘请求转发给Wine代理,Wine代理执行弹出软件盘操作。在一个示例中,安卓手机为Ophone手机。在一个示例中,步骤1中,当发生软键盘事件时,调用函数Wine代理的函数 onTouchEvent()。在一个示例中,步骤1中,Wine代理通过套接字将软件盘事件发送至X视窗服务进程。在一个示例中,步骤2中,X视窗服务进程将转换后的事件通知发送至应用进程。在一个示例中,步骤3中,应用进程中的Winexll. drv. dll将事件通知上交至公共控件管理模块的comet 132. dll。在一个示例中,步骤3中,c0mctl32. dll判断光标落在可编辑的控件中,决定弹出软键盘。在一个示例中,步骤3中,Winexll. drv. dll将弹出软键盘的请求发送至X视窗服
务进程。在一个示例中,步骤4中,X视窗服务进程进行格式转换之后将弹出软键盘的请求转发给Wine代理。在一个示例中,还包括步骤5,用户按下软键盘的某个键后,调用WineProxy的函数onTextChange ();步骤6,从TextView的缓冲区中获取键入的字符,并将其发送给X视窗服务进程;步骤7,X视窗服务进程将字符转发给应用进程中的Winexll. drv. dll ;步骤8,Winexll. drv. dll向应用进程发送一个WM_CHAR消息;步骤9,应用进程接收到WM_CHAR消息;用户点击回车键或点击不可编辑的区间, 关闭软键盘。本发明使得人机交互输入统一流经Wine服务进程(Wineserver)以及feerver,再由代理进程加以接收后执行弹出软键盘工作,整个过程中只有一套输入信息的处理和配送机制,解决了 Wine和Android/OMS关于软键盘输入的整合问题,同时解决了弹出、关闭软键盘的时机与途径问题。


下面结合附图来对本发明作进一步详细说明,其中图1是将Wine移植到ARM架构的Linux平台并运行WinCE/WM应用程序时的系统的基本架构示意图;图2是应用软键盘整合方案后的键盘输入操作的流程示意图。
具体实施例方式本发明在原有的中国移动提出的简单程序原型的基础上,加以完善和改进,实现了一种完整的整合方案。该方案首先切断feerver获取软键盘的输入的途径,而在运行WinCE/WM应用时, Android启动一个进程作为Wine的代理win印roxy,这与中国移动的方案类似,然而这个代理必须要与feerver通信,为此,首先建立其与feerver之间建立起Socket连接,并定义一组简单地通信协议。同时完善Wine与Xserver之间的协议,并且提供一个API使得Wine 可以向Xserver请求弹出软键盘。此时,只要一发生键盘输入,Wine就向Xserver发出事件通知,使后者将其当做内核的键盘/鼠标输入,并上交到公共空间管理层决定是否弹出软键盘。之后Xserver将Wine的弹出软键盘请求递交给其代理win印roxy,后者即可执行弹出软键盘操作。而当软键盘弹出后,对软键盘的按键操作也将通过相反的消息传递通路返回,最终到达WinCE/WM应用,被其所捕获。这个方法的要点为1)、在feerver的代码中切断从内核获取键盘/鼠标器输入的途径。2)、在Xserver和Win印roxy之间建立起一对Socket,并定义一套简单的通信协议。3)、对)(server与Wine之间的通信协议加以扩充,并在Winexll. drv. dll中增添一个API函数,使Wine可以向Xserver请求弹出软件盘。4)、一发生键盘/鼠标器事件,Wineserver就向Xserver发出事件通知。5)、得到来自Wineserver的事件通知后,Xserver将其当作来自内核的键盘/鼠标器输入,转化成feerver格式的消息后发送给Winexll. drv中的键盘/鼠标器输入处理程序。键盘/鼠标器输入处理程序是在Winex 11. drv中的一段根据不同输入消息类型进行分支的代码。即如果发现送来的消息是Xserver格式的消息,则处理程序直接将其交给上层。这个输入处理程序就是这样If是Xserver格式的消息,消息内容是touchEvent Then直接将消息交于comctl32. dll即公共空间管理Else 其他事件,按照原有的处理代码来处理。6) ,Winexll. drv将输入上交到公共控件管理这一层,由公共控件管理机制决定是否需要弹出软键盘。7)、XserVer将来自Wine的弹出软键盘请求转发给Win印roxy,由后者执行弹出软件盘的操作。图1是按本发明中的背景的软件系统架构。图中的水平虚线表示用户空间与系统空间的分界,虚线以上为用户空间,以下为系统空间。图中的每个圆圈都代表着一个进程, 其中最大的那个圆圈代表运行着WinCE/WM应用的那个进程;这个圆圈分成上下两部分,表示这个进程是由WinCE/WM应用的EXE映像和所有被(直接或间接地)动态连接到这个映像的DLL两个部分共同构成的。除运行着WinCE/WM应用的进程之外,系统中至少还有两个进程,一个是Wineserver,就是Wine服务器进程,另一个是Xserver,就是TinyX的服务器进程。WinCE/WM应用进程之所以能在Linux内核上运行,是因为有Wineserver和DLL的支持。而WinCE/WM应用进程之所以能获取键盘输入和鼠标器输入,之所以能在屏幕上显示图形,是因为有Xserver的存在。在常规的Linux系统中,来自键盘和鼠标器的输入全部为 Xserver所截获,再由Xserver分发给当前受到聚焦的进程。图2是按本发明所述方法的完整结构示意图,从图中可以看到各个模块之间仅仅通过一条链式通路相连,避免消息传递的混乱与冲突。期中Wine与Xserver (TinyX)之间、 Tinx与Wineproxy之间通过定义的socket通信协议来相互通信。根据整合方案,需要对代码进行以下修改1)、定义WineProxy的代理接口包含通信功能以及控制软键盘弹出关闭等功能的抽象函数。2)、具体实现这些函数,其中通信的函数中需要建立socket connection来和 Xserver 通信。3)、同样在)(server中也定义socket connection,此时可通过自定义的通信协议,创建一些事件,比如键盘、鼠标器等按键事件的监听器(Listener)。4)、在事件响应函数中将收到的事件转换格式,使得相应的应用程序能够识别,如果是请求/关闭软键盘的事件,则通知WineProxy的弹出/关闭软键盘操作。5)、Xserver中加入与上层dll通信的函数,完成请求判断鼠标区域、输入字符转发等通信任务。通过实现上述功能后,一个完整的软键盘输入操作的流程如下1.使用者点击屏幕上的某个区间。2. WineProxy 的 onTouchEvent ()得到调用。3. WineProxy 将此事件通过 socket 发送给 Xserver,即 TinyX。4. Xserver将此事件通知转换成Xll协议所规定的格式,并将其转发给应用进程, 这个事件与feerver获知键盘/鼠标器状态发生变化时的事件等价。5.应用进程中的Winexll. drv. dll接收到来自Xserver的事件后,将其上交给上层的 comctl32. dll。6.上层DLL检查此时的光标是否落在某个可编辑的控件中,如果是就调用 ffinexll. drv. dll提供的一个API函数,要求弹出软键盘。7. ffinexll. drv. dll将弹出软键盘的要求发送给)(server。8. Xserver进行格式转换之后将请求转发给WineftOxy。9. WineProxy 弹出软键盘。10.使用者在软键盘上按下某个键。
11. WineProxy的onTextChange ()得到调用,从其iTextView的缓冲区中获取键入的字符,并将其发送给feerver。12. feerver收到来自WineProxy的输入字符,将其转发给应用进程中的Winexll. drv. dll ο13. Winexll. drv. dll 向应用进程发送一个 WM_CHAR 消息。14.应用进程接收到WM_CHAR消息。

15.使用者点击回车键或点击不可编辑的区间,关闭软键盘。本发明通过采用一个统一的机制,来管理键盘/鼠标器的输入和屏幕输出,使得 TinyX和Android在软键盘按下时的不相互冲突,同时解决了在什么时候要(在屏幕上)弹出软键盘、而什么时候又不应该弹出软键盘的问题。以上所述仅为本发明的优选实施方式,但本发明保护范围并不局限于此。任何本领域的技术人员在本发明公开的技术范围内,均可对其进行适当的改变或变化,而这种改变或变化都应涵盖在本发明的保护范围之内。
权利要求
1.Wine与安卓手机软键盘输入的整合方法,其特征在于,包括步骤1,当发生软键盘事件时,Wine代理向X视窗服务进程发出事件通知;步骤2,X视窗服务进程按照预定的格式对事件通知进行转换后,将转换后的事件通知发送至Winexll. drv中的键盘/鼠标器输入处理程序;步骤3,Winexll. drv将软键盘事件上交到公共控件管理模块,公共控件管理模块决定弹出软键盘;步骤4,X视窗服务进程将来自Wine的弹出软键盘请求转发给Wine代理,Wine代理执行弹出软件盘操作。
2.如权利要求1所述的整合方法,其特征在于,安卓手机为Ophone手机。
3.如权利要求1或2所述的整合方法,其特征在于,步骤1中,当发生软键盘事件时,调用函数Wine代理的函数OnI1OuchEvent ()。
4.如权利要求3所述的整合方法,其特征在于,步骤1中,Wine代理通过套接字将软件盘事件发送至X视窗服务进程。
5.如权利要求4所述的整合方法,其特征在于,步骤2中,X视窗服务进程将转换后的事件通知发送至应用进程。
6.如权利要求5所述的整合方法,其特征在于,步骤3中,应用进程中的Winexll.drv. dll将事件通知上交至公共控件管理模块的comctl32. dll。
7.如权利要求6所述的整合方法,其特征在于,步骤3中,comctl32.dll判断光标落在可编辑的控件中,决定弹出软键盘。
8.如权利要求7所述的整合方法,其特征在于,步骤3中,Winexll.drv. dll将弹出软键盘的请求发送至X视窗服务进程。
9.如权利要求8所述的整合方法,其特征在于,步骤4中,X视窗服务进程进行格式转换之后将弹出软键盘的请求转发给Wine代理。
10.如权利要求9所述的整合方法,其特征在于,还包括步骤5,用户按下软键盘的某个键后,调用WineProxy的函数onTextChange ();步骤6,从TextView的缓冲区中获取键入的字符,并将其发送给X视窗服务进程;步骤7,X视窗服务进程将字符转发给应用进程中的Winexll. drv. dll ;步骤8,Winexll. drv. dll向应用进程发送一个WM_CHAR消息;步骤9,应用进程接收到WM_CHAR消息;用户点击回车键或点击不可编辑的区间,关闭软键盘。
全文摘要
本发明公开了Wine与安卓手机软键盘输入的整合方法,包括步骤1,当发生软键盘事件时,Wine代理向X视窗服务进程发出事件通知;步骤2,X视窗服务进程按照预定的格式对事件通知进行转换后,将转换后的事件通知发送至Winex11.drv中的键盘/鼠标器输入处理程序;步骤3,Winex11.drv将软键盘事件上交到公共控件管理模块,公共控件管理模块决定弹出软键盘;步骤4,X视窗服务进程将来自Wine的弹出软键盘请求转发给Wine代理,Wine代理执行弹出软件盘操作。本发明使解决了Wine和Android/OMS关于软键盘输入的整合问题,同时解决了弹出、关闭软键盘的时机与途径问题。
文档编号G06F9/44GK102331927SQ20111017284
公开日2012年1月25日 申请日期2011年6月24日 优先权日2011年6月24日
发明者傅唯威, 徐鼎鼎, 毛德操, 王承志, 陈天洲 申请人:浙大网新科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1