掌桥专利:专业的专利平台
掌桥专利
首页

一种将Linux输入法共享给Android的方法

文献发布时间:2023-06-19 11:29:13


一种将Linux输入法共享给Android的方法

技术领域

本发明属于Linux操作系统技术领域,具体涉及一种将Linux输入法共享给Android的方法。

背景技术

近年来,随着Android用户的增长,以及Android软硬件产品的成熟和发展,Android应用生态呈现出爆发式发展,在很多领域都已经超过Windows和iOS,成为目前使用最广泛的应用生态。Android基于Linux内核发展而来,是目前移动终端市场中市场份额最高的Linux类操作系统,在移动终端领域具有极好的生态环境;Windows系统占据着PC市场的最大份额,其作为美国闭源操作系统,在信息网络安全方面存在巨大安全隐患;而Linux操作系统,其作为Android的前身,由于开发人员数目和市场份额的限制,发展较为缓慢,生态环境长期处于不良状态,一直不见起色。随着信息技术的飞速发展,国家对信息安全的重视程度日益提升,国内基于开源Linux操作系统的自主操作系统日益发展壮大,但Linux操作系统生态应用的严重缺乏仍旧是困扰Linux操作系统真正推向市场的一大痛点。

要解决Linux操作系统的生态问题,必须解决用户数不足和平台应用软件数不足这两个关键点。Android在移动终端领域具有广泛的用户群,并且具有成熟的开发平台和应用软件群体,对于解决Linux操作系统目前的窘境具有一定的参考价值。

由于Android操作系统基于Linux内核发展而来,其针对移动终端设备的特点在用户空间做了大幅的改进和增强,所以给Linux操作系统兼容Android应用提供了极大的可能性和便利,使得移动端的丰富应用很有可能成功运行在PC端。近年来,Android应用生态在Linux操作系统上的兼容支持成为了研究热点,国内外有许多研究人员尝试将Android运行环境迁移到Linux类计算机平台以实现Android应用生态在Linux操作系统上兼容支持的效果,各种兼容技术衍生而出,其中就包括Google的ARC(App Runtime for Chrome)技术,虚拟机和模拟器技术、Anbox(Android in a Box)项目等,这些技术将PC端和移动端进行融合,成功将Android应用生态迁移到Linux上来,极大地推动了Linux应用生态的发展,很大程度上弥补了Linux应用缺乏的诟病,方便了Linux操作系统用户的日常办公、娱乐等需求,也加快了Linux操作系统走向消费市场的步伐,但它们都还存在着用户无法忽视的体验问题,包括稳定性、易用性、功能完备性等,导致这块技术领域没有显著的提升。

在Linux桌面操作系统上,输入法是图形界面功能的一部分,各应用软件进程通过进程间通信获取键盘输入的数据。人机交互的输入先由Linux系统中的输入法图形窗口进程读取,输入法服务进程统一进行前期处理,然后根据屏幕上当前光标的位置和处于“聚焦”状态的视窗而配送给对应的进程。所述的前期处理,简单化即由输入法视窗本身加以实施,复杂化则由外挂的程序模块加以处理,输入法就是这样的外挂程序模块。在Linux系统上,应用的输入法实际上是为图形视窗开发的输入法,而在Android系统上,包括输入法在内的所有图形界面功能全都由Android自己提供,Android系统上已经存在了各式各样的输入法。

如果要在Android兼容环境下以多窗口方式运行Android应用,输入法则成为了一个亟待解决的问题。Android应用需要与Android的输入法配套,而Linux应用则需要使用Linux输入法图形视窗提供的输入法,在共享内核上同时运行的两种系统使用各自不同的输入法,将会导致键盘和其他输入设备无法统一处理和配送,这样无疑会给使用者带来诸多不便。在Android兼容环境的多窗口模式下,所有的Android App都有一个关联的Linux视图窗口,如果每个视图窗口都需要使用Android输入法,问题就将变得更加复杂。

所以,要在Linux设备上运行Android应用,就需要解决整合输入法的问题,使得Android应用能使用Linux输入法。

发明内容

为解决上述问题,本发明提供了一种将Linux输入法共享给Android的方法,所述方法包括步骤:

每当Linux系统启动一个Android应用时,Linux系统创建一个Linux系统显示视窗,Zygote创建一个App应用进程;

所述App应用将所述Linux系统显示视窗与自身绑定并显示;

所述Android应用点击输入框获取焦点,IPC通信传递光标位置及相关数据,Linux输入法响应并将输入事件绑定到当前具有焦点的窗口;

Linux图形输入窗口获取所述Linux输入法的输入数据,并通过所述IPC通信传给所述Android应用的输入框显示;

Android应用输入框光标随输入内容移动,所述Linux输入法应用动态跟随所述Android应用输入框的光标位置变化而改变坐标;

所述Android应用输入框焦点丢失,所述IPC通信通知所述Linux输入法的输入事件解除绑定当前窗口。

优选地,在所述每当Linux系统启动一个Android应用时之前还包括步骤:

所述Linux系统显示视窗获取所述Linux输入法;

将所述Android应用输入框与所述Linux输入法关联;

将所述Linux输入法数据显示在所述Android输入框。

优选地,所述显示视窗获取所述Linux输入法包括步骤:

将所述Linux系统显示视窗与所述Android应用绑定;

创建Linux端的服务程序与所述Android应用间的IPC通信;

所述Linux系统显示视窗根据所述Android应用输入框输入状态请求输入法连接。

优选地,所述将所述Android应用输入框与所述Linux输入法关联包括步骤:

所述Android应用输入框处于焦点状态并连接所述Linux输入法;

所述Android应用输入框丢失焦点状态并断开所述Linux输入法。

优选地,所述将所述Linux输入法数据显示在所述Android输入框包括步骤:

创建一个通信管理模块,人机交互输入统一经过Linux提供的输入法和配送机制;

修改Android输入法系统服务源码,创建接收输入数据的接口;

通信管理模块与Android输入法进行IPC通信;

修改Android输入法代码,接收自Linux输入法的输入数据;

数据转发至Android输入法系统服务接口;

Android应用进程的输入框获取接口中的输入数据并显示。

本发明提供的一种将Linux输入法共享给Android的方法为运行在Linux系统上Android兼容环境中的Android应用提供一种共享Linux输入法的机制,将Android应用跟Linux的输入法整合在一起,让Linux成为统一接收、处理、配送人机交互输入信息的唯一实体,为Android应用提供人机交互输入信息,Android内部先由管理模块接收输入法数据,再转发给Android的输入法系统服务进程,最后到达运行的Android应用进程,不需要进行两个系统之间输入法的来回切换,从而实现输入法的整合,极大地提升户体验感受。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明提供的一种将Linux输入法共享给Android的方法的流程示意图;

图2是现有技术中Linux操作系统的示意图;

图3是本发明提供的一种将Linux输入法共享给Android的方法中Linux操作系统的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。

如图1,在本申请实施例中,本发明提供了一种将Linux输入法共享给Android的方法,所述方法包括步骤:

S1:每当Linux系统启动一个Android应用时,Linux系统创建一个Linux系统显示视窗,Zygote创建一个App应用进程;

S2:所述App应用将所述Linux系统显示视窗与自身绑定并显示;

S3:所述Android应用点击输入框获取焦点,IPC通信传递光标位置及相关数据,Linux输入法响应并将输入事件绑定到当前具有焦点的窗口;

S4:Linux图形输入窗口获取所述Linux输入法的输入数据,并通过所述IPC通信传给所述Android应用的输入框显示;

S5:Android应用输入框光标随输入内容移动,所述Linux输入法应用动态跟随所述Android应用输入框的光标位置变化而改变坐标;

S6:所述Android应用输入框焦点丢失,所述IPC通信通知所述Linux输入法的输入事件解除绑定当前窗口。

在本申请实施例中,将Linux输入法共享给Android的方法的具体步骤如下:

1.1)每当启动一个Android应用时,Linux会为其创建一个显示视窗,Zygote为其创建一个App应用进程,App应用与这个视窗绑定并显示,与实际的Linux进程有着相同的生命周期;1.2)Android应用点击输入框获取焦点,IPC通信传递光标位置及相关数据,Linux输入法响应并将输入事件绑定到当前具有焦点的窗口;1.3)Linux图形输入窗口获取输入法的输入数据,通过IPC通信传给Android应用程序的输入框显示;1.4)Android应用输入框光标随输入内容移动,Linux输入法应用动态跟随输入框的光标位置变化而改变坐标;1.5)Android应用输入框焦点丢失,IPC通信通知Linux输入法的输入事件解除绑定当前窗口。

附图2中的竖直虚线将系统分成两半,左边是Linux系统层及其应用,右边是Android系统层及其应用,二者共用同一个Linux内核。图中的Linux应用的人机交互输入来自Linux,Linux输入法的输入信息来自外部设备,包括按键及其设备驱动程序,输入法的输出由Linux的输入法的输入框架转发到对应Linux图形窗口程序;而Android系统由Android输入法产生的输入信息也来自外部设备,再由Android系统的输入法服务框架转发到对应的Android应用的输入框中。两种系统使用各自系统的输入法,将给在Linux上使用Android兼容环境的使用者带来不便,在缺乏统一的仲裁和协调机制的条件下,两个互相独立的输入法都从相同的外部设备及其驱动获取输入,就会发生两边争抢输入的情况发生。而且Android的输入法只能显示在Android的应用窗口中,不能在Linux桌面上任意拖动,显示两种输入法也会给用户造成使用上的混乱。

经过图1的方法后,图2中的系统示意图得到图3中的系统示意图,每个Android应用在Linux端都有一个对应的图形窗口,这个视窗的位置和大小以及Android应用输入框的坐标都是已知的,输入框“聚焦”后,这个与Android应用绑定的Linux图形窗口会拉起Linux输入法,这时所有的按键输入事件都通过Linux输入法解析合成,然后将输入数据转发给Android应用。

在本申请实施例中,在所述每当Linux系统启动一个Android应用时之前还包括步骤:

所述Linux系统显示视窗获取所述Linux输入法;

将所述Android应用输入框与所述Linux输入法关联;

将所述Linux输入法数据显示在所述Android输入框。

在本申请实施例中,所述显示视窗获取所述Linux输入法包括步骤:

将所述Linux系统显示视窗与所述Android应用绑定;

创建Linux端的服务程序与所述Android应用间的IPC通信;

所述Linux系统显示视窗根据所述Android应用输入框输入状态请求输入法连接。

在本申请实施例中,Android应用输入框获取焦点时,通过IPC传递给Android系统服务,再通过Linux通信管理模块发送给Linux图形窗口,从而与Linux输入法进行绑定操作,绑定函数为bindServer。

伪代码如下:

在本申请实施例中,所述将所述Android应用输入框与所述Linux输入法关联包括步骤:

所述Android应用输入框处于焦点状态并连接所述Linux输入法;

所述Android应用输入框丢失焦点状态并断开所述Linux输入法。

在本申请实施例中,所述将所述Linux输入法数据显示在所述Android输入框包括步骤:

创建一个通信管理模块,人机交互输入统一经过Linux提供的输入法和配送机制;

修改Android输入法系统服务源码,创建接收输入数据的接口;

通信管理模块与Android输入法进行IPC通信;

修改Android输入法代码,接收自Linux输入法的输入数据;

数据转发至Android输入法系统服务接口;

Android应用进程的输入框获取接口中的输入数据并显示。

在本申请实施例中,具体的IPC跨进程通信步骤流程及伪代码如下:

步骤1:Android应用输入框获取焦点时,通过IPC传递给Android系统服务,再通过Linux通信管理模块发送给Linux图形窗口,从而与Linux输入法进行绑定操作,绑定函数为bindServer。

步骤2:Linux图形输入窗口获取输入信息时,通过IPC将输入信息发给Linux通信管理模块,再转发给Android系统服务,通过回调函数最终提交到Android应用的输入框,提交输入信息到输入框的函数为showText。

步骤3:Android应用输入框光标变化时,通过IPC传递给Android系统服务,再通过Linux通信管理模块发送给Linux图形输入窗口通知Linux输入法调整输入法框的坐标,获取输入框的位置函数为requestImeLocation。

public void requestImeLocation(){

mUIHandler.sendEmptyMessageDelayed(1,500);

}

步骤4:Android应用输入框丢失焦点时,通过IPC传递给Android系统服务,再通过Linux通信管理模块发送给Linux图形窗口,让图形窗口与Linux输入法进行解绑操作,解除绑定函数为unbindServer。

JNIEXPORT void JNICALL

Java_com_android_JniService_unbindServer(JNIEnv*env,jobject){//解绑

close();

unlink();

}

本发明提供的一种将Linux输入法共享给Android的方法为运行在Linux系统上Android兼容环境中的Android应用提供一种共享Linux输入法的机制,将Android应用跟Linux的输入法整合在一起,让Linux成为统一接收、处理、配送人机交互输入信息的唯一实体,为Android应用提供人机交互输入信息,Android内部先由管理模块接收输入法数据,再转发给Android的输入法系统服务进程,最后到达运行的Android应用进程,不需要进行两个系统之间输入法的来回切换,从而实现输入法的整合,极大地提升户体验感受。

应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

相关技术
  • 一种将Linux输入法共享给Android的方法
  • Linux应用在Android手机上运行时整合中文输入法的方法
技术分类

06120112942130