一种桌面系统上安卓应用键盘映射辅助提示的显示方法与流程

文档序号:31599430发布日期:2022-09-21 08:15阅读:189来源:国知局
一种桌面系统上安卓应用键盘映射辅助提示的显示方法与流程

1.本发明属于在桌面操作系统上运行移动应用的开发技术领域,具体涉及一种桌面系统上安卓应用键盘映射辅助提示的显示方法。


背景技术:

2.linux或windows等桌面操作系统android运行环境是一种在linux或windows操作系统上运行android应用(app)的技术,该技术对丰富操作系统应用生态具有非常重要的意义。通常情况下,典型的安卓兼容环境主要包括安卓应用显示单元和安卓应用兼容服务,安卓应用显示单元用于在桌面操作系统上实现安卓应用的用户界面,安卓应用兼容服务用于提供运行于桌面操作系统上的安卓兼容环境,通过安卓应用显示单元与安卓应用兼容服务的相互配合实现安卓应用在桌面操作系统上的有效运行,例如,现有安卓兼容环境的实现方案有xdroid,它包括xdroidui和xdroidserver,xdroidui为安卓应用显示单元,xdroidserver为安卓应用兼容服务。
3.使用android运行环境在桌面操作系统上运行android应用时,由于pc计算机的显示器往往不支持触摸,通常使用鼠标点击模拟触摸事件。但是,对于复杂的android应用窗口操作,例如游戏应用中的多点快速触摸,就需要用键盘的不同的按键对应到应用窗口的不同位置,即按下某一键,就相当于点击了应用窗口的某个位置,将键盘事件根据用户预定的设置转换为安卓系统内的触摸事件,从而实现采用键盘体验安卓系统游戏的功能。然而,对于某些大型的游戏应用往往需要设置很多按键才能满足用户的操作需求,增多的按键会导致用户对按键与显示界面区域间对应关系的记忆困难,因此为配置了键盘映射功能的安卓应用显示键盘映射辅助提示信息,对方便用户操作而言是非常必要的。
4.在现有的键盘映射实现方案中,键盘映射辅助提示信息无法智能选择所显示的区域,可能会产生覆盖安卓应用显示界面内文本的情况,这会导致用户操作不便甚至操作失误,进而影响用户体验。


技术实现要素:

5.有鉴于此,本发明提供了一种桌面系统上安卓应用键盘映射辅助提示的显示方法,提供了多种键盘映射辅助提示的显示方式并实现了根据安卓应用显示界面的实际情况调整键盘映射辅助提示的具体显示方式。
6.本发明提供的一种桌面系统上安卓应用键盘映射辅助提示的显示方法,具体包括以下步骤:步骤1、当用户在安卓兼容环境中打开安卓应用启动键盘映射时,保存安卓应用当前显示界面;获取安卓应用当前显示窗口的窗口句柄、窗口大小和窗口左顶点位置;在桌面系统中创建始终置顶显示、背景透明的窗口作为辅助提示窗口,辅助提示窗口的大小及位置与所述当前显示窗口相同,采用所述窗口句柄设置辅助提示窗口的父窗口,辅助提示窗口设置为鼠标和键盘事件穿透模式;
步骤2、将键盘映射的按键键值转换为对应的辅助提示文本,获取辅助提示文本的文本显示范围;若辅助提示显示方式为以框体方式显示则执行步骤3,若辅助提示显示方式为以文本方式显示则执行步骤4;步骤3、根据键盘映射的文本显示范围及按键位置构建目标框体,目标框体的左顶点位置或中心位置为按键位置、尺寸为在文本显示范围基础上增加设定值,目标框体的填充颜色为具有透明度的设定值,目标框体内绘制辅助提示文本;执行步骤5;步骤4、根据键盘映射的文本显示范围及按键位置,确定安卓应用当前显示界面中对应的目标区域,计算目标区域内所有像素点的rgb值的均值,对均值取反色值;构建背景为全透明的目标框体,目标框体的左顶点位置或中心位置为按键位置,目标框体的尺寸为文本显示范围,目标框体内绘制辅助提示文本,辅助提示文本的颜色设置为反色值;执行步骤5;步骤5、在辅助提示窗口内绘制目标框体,完成键盘映射辅助提示信息的显示。
7.进一步地,所述步骤1中所述当用户在安卓兼容环境中打开安卓应用启动键盘映射时,若键盘映射配置文件中存在安卓应用的键盘映射配置信息并配置为开启键盘映射,则保存安卓应用当前显示界面;否则,待用户配置并保存键盘映射配置文件后,保存安卓应用当前显示界面。
8.进一步地,所述辅助提示窗口为无边框窗口。
9.进一步地,所述步骤5中所述在辅助提示窗口内绘制目标框体后,若桌面系统中的安卓应用为多窗口显示,则监听当前显示窗口的焦点事件,若当前显示窗口失去焦点,则隐藏辅助提示窗口。
10.进一步地,所述步骤3中在所述目标框体内绘制辅助提示文本后,执行以下步骤:步骤5.1、在安卓兼容环境中获取当前显示窗口内所有文本框内文本的位置作为显示界面文本位置,将显示界面文本位置发送至安卓应用显示单元;步骤5.2、若目标框体的左顶点位置与显示界面文本位置相同或差值小于阈值,则安卓应用显示单元以目标框体为中心计算满足与目标框体面积相同且与显示界面文本位置不同或差值不小于阈值的新区域,若存在新区域则将其作为新的目标框体并执行步骤5,若不存在则执行步骤5.4;若目标框体的左顶点位置与显示界面文本位置不同或差值不小于阈值,则执行步骤5.3;步骤5.3、识别当前显示窗口中与目标框体具有相同位置的区域内是否包含文本,若包含文本则将与目标框体具有相同位置的文本区域作为显示界面文本区域,令测试次数n的取值为零,执行步骤5.4;若未包含文本则保留目标框体作为新的目标框体后执行步骤5;步骤5.4、若n不大于阈值,则将目标框体在以框体中心点为中心、以设定像素为半径的圆周上移动,移动过程中按照设定步进获取目标框体所在新位置,以新位置的框体作为目标框体,令n自加1,令设定像素增加设定值,执行步骤5.3;若n大于阈值,则选择所包含文本面积最小的显示界面文本区域作为目标框体后执行步骤5。
11.进一步地,所述步骤4中在所述辅助提示文本的颜色设置为反色值后,执行以下步骤:步骤6.1、在安卓兼容环境中获取当前显示窗口内所有文本框内文本的位置作为
显示界面文本位置,将显示界面文本位置发送至安卓应用显示单元;步骤6.2、若目标框体的左顶点位置与显示界面文本位置相同或差值小于阈值,则安卓应用显示单元以目标框体为中心计算满足与目标框体面积相同且与显示界面文本位置不同或差值不小于阈值的新区域,若存在新区域则将其作为新的目标框体并执行步骤5,若不存在则执行步骤6.4;若目标框体的左顶点位置与显示界面文本位置不同或差值不小于阈值,则执行步骤6.3;步骤6.3、识别当前显示窗口中与目标框体具有相同位置的区域内是否包含文本,若包含文本则将与目标框体具有相同位置的文本区域作为显示界面文本区域,令测试次数n的取值为零,执行步骤6.4;若未包含文本则保留目标框体作为新的目标框体后执行步骤5;步骤6.4、若n不大于阈值,则将目标框体在以框体中心点为中心、以设定像素为半径的圆周上移动,移动过程中按照设定步进获取目标框体所在新位置,以新位置的框体作为目标框体,令n自加1,令设定像素增加设定值,执行步骤6.3;若n大于阈值,则选择所包含文本面积最小的显示界面文本区域作为目标框体后执行步骤5。
12.有益效果:1、本发明在安卓兼容环境内当用户配置并启动键盘映射功能并将配置文件中的按键键值转换为对应的辅助提示信息显示在配置文件中按键位置指定的安卓应用显示界面中时,通过根据安卓应用显示界面的特征提供多种形态的辅助提示信息显示方式,以使辅助提示信息的显示达到使用户能够明显辨识且不影响用户正常的视觉体验效果,本发明提供的方案无需修改安卓系统的渲染框架,因此能够有效降低性能开销,同时能够兼容多种版本的安卓系统,不需要额外维护多个版本的安卓系统。
13.2、本发明针对安卓兼容环境的多窗口模式,在确定用户当前正在操作的安卓应用后仅显示该安卓应用的键盘映射辅助提示信息。
附图说明
14.图1为本发明提供的一种桌面系统上安卓应用键盘映射辅助提示的显示方法的流程图。
具体实施方式
15.下面结合附图并举实施例,对本发明进行详细描述。
16.本发明提供的一种桌面系统上安卓应用键盘映射辅助提示的显示方法,其核心思想是:在安卓兼容环境内当用户配置并启动键盘映射功能时,将配置文件中的按键键值转换为对应的辅助提示信息显示在配置文件中按键位置指定的安卓应用显示界面中,辅助提示信息包含两种形态:一种是采用带背景色的框体显示辅助提示信息,另一种是以带颜色的文本方式显示辅助提示信息,辅助提示信息的显示需达到使用户能够明显辨识且不影响用户正常的视觉体验效果。
17.本发明提供的一种桌面系统上安卓应用键盘映射辅助提示的显示方法,流程如图1所示,包括以下步骤:步骤1、当用户在安卓兼容环境中打开安卓应用时,若键盘映射配置文件中存在安
卓应用的键盘映射配置信息并配置为开启键盘映射,则保存安卓应用当前显示界面再执行步骤2;否则,待用户配置并启动键盘映射保存键盘映射配置文件后,保存安卓应用当前显示界面再执行步骤2。
18.其中,键盘映射配置文件中包含辅助提示显示方式、按键位置及按键键值。辅助提示显示方式包括以下两种方式:一是以框体方式显示,即将按键键值对应的辅助提示文本显示在具有背景色的框体内,框体可为圆角矩形、矩形等区域,此外,辅助提示文本可居中显示在框体内;二是以文本方式显示,即以用户能辨识出的方式仅显示辅助提示文本。
19.步骤2、获取安卓应用当前显示窗口的窗口句柄、窗口大小和窗口左顶点位置;在桌面系统中创建属性为始终置顶显示的透明窗口作为辅助提示窗口,采用安卓应用当前显示窗口的窗口大小及窗口左顶点位置设置辅助提示窗口的大小及位置,采用安卓应用当前显示窗口的窗口句柄设置辅助提示窗口的父窗口。
20.为进一步改善用户体验,还可将辅助提示窗口设置为无边框窗口。
21.步骤3、将辅助提示窗口的全区域设置为鼠标和键盘事件穿透模式,即对于发生在辅助提示窗口内的鼠标和键盘事件均由辅助提示窗口的父窗口安卓应用当前显示窗口进行响应,由此可实现将桌面系统内针对辅助提示窗口的所有鼠标键盘事件发送到安卓兼容环境内。
22.具体来说,包括以下步骤:获取桌面系统的显示服务器,若显示服务器为支持x11协议的显示服务器,则通知窗口管理器遍历桌面系统中当前显示的所有窗口确定其中的辅助提示窗口,采用xshapecombinerectangle将辅助提示窗口所对应的显示区域设置为鼠标穿透区域;若显示服务器为支持wayland协议的显示服务器,则通过dbus接口获取全局的鼠标和键盘事件,若鼠标和键盘事件中包含事件类型和位置信息,则通过位置信息与安卓应用当前显示窗口的窗口大小和窗口左顶点位置判断鼠标和键盘事件是否为发生在辅助提示窗口区域内的事件,若不在辅助提示窗口区域内则不响应事件,若在辅助提示窗口区域内则修改wayland窗口管理器将辅助提示窗口区域内的鼠标和键盘事件均发送至辅助提示窗口的父窗口;若显示服务器为windows系统显示服务器,则通知窗口管理器遍历桌面系统中当前显示的所有窗口确定其中的辅助提示窗口,调用setwindowlong将辅助提示窗口的属性设置为ws_ex_transparent 和 ws_ex_layered。
23.步骤4、将安卓应用键盘映射配置文件中的按键键值转换为对应的辅助提示文本,获取辅助提示文本的文本显示范围;获取键盘映射配置文件中的辅助提示显示方式及按键位置,若辅助提示显示方式为以框体方式显示则执行步骤5,若辅助提示显示方式为以文本方式显示则执行步骤6。
24.步骤5、根据步骤4得到的辅助提示文本的文本显示范围及按键位置,确定将在辅助提示窗口内绘制的框体为目标框体,目标框体的左顶点位置或中心位置为按键位置,目标框体的尺寸为在文本显示范围基础上增加设定值,目标框体的填充颜色为具有透明度的设定值,目标框体内绘制辅助提示文本;执行步骤7。
25.步骤6、根据步骤4得到的辅助提示文本的文本显示范围及按键位置,确定安卓应用当前显示界面中对应的目标区域,获取目标区域内所有像素点的rgb值,计算所有rgb值
的均值,对均值取反色值;确定将在辅助提示窗口内绘制的背景为全透明的框体为目标框体,目标框体的左顶点位置或中心位置为按键位置,目标框体的尺寸为文本显示范围,目标框体内绘制辅助提示文本,辅助提示文本的颜色设置为反色值;执行步骤7。
26.步骤7、在辅助提示窗口内绘制上述步骤确定的目标框体,完成键盘映射辅助提示信息的显示。
27.进一步地,当桌面系统中的安卓应用为多窗口显示模式时,为了满足多窗口下只能有一个窗口进行键盘映射的操作需求,同时解决由辅助提示窗口为始终置顶可能导致的窗口叠加问题,本发明提供的多窗口显示模式下的辅助提示显示的处理方式为:安卓应用显示单元监听安卓应用当前显示窗口的焦点事件,若当前显示窗口失去焦点,则隐藏辅助提示窗口,在当前显示窗口再次获取焦点时再显示辅助提示窗口。
28.进一步地,当辅助提示信息显示在安卓应用界面中时,由于辅助提示信息显示位置所对应的安卓应用界面中包含文字,这可能会导致用户无法看清关键内容,为用户操作带来困难,因此为了达到更佳的显示效果,本发明提供了基于安卓应用显示界面中显示文本的位置信息,动态地调整辅助提示信息显示位置的方式,具体在上述步骤5或步骤6之后执行以下步骤:步骤6.1、在安卓兼容环境中获取安卓应用当前显示窗口内所有文本框内文本的位置信息,保存为显示界面文本位置,将显示界面文本位置发送至安卓应用显示单元。
29.步骤6.2、安卓应用显示单元获取步骤5或步骤6确定的目标框体,若目标框体的左顶点位置与显示界面文本位置相同或差值小于阈值,则以目标框体为中心计算满足与目标框体面积相同且与显示界面文本位置不同或差值不小于阈值的新区域,若存在新区域则将其作为新的目标框体则执行步骤7,若不存在则执行步骤6.4;若目标框体的左顶点位置与显示界面文本位置不同或差值不小于阈值,则执行步骤6.3。
30.步骤6.3、识别安卓应用当前显示界面中与目标框体具有相同位置的区域内是否包含文本,若包含文本则将与目标框体具有相同位置的文本区域作为显示界面文本区域,令测试次数n的取值为零,执行步骤6.4;若未包含文本则保留目标框体作为新的目标框体后执行步骤7。
31.步骤6.4、若n不大于阈值,则将目标框体在以框体中心点为中心、以设定像素为半径的圆周上移动,移动过程中按照设定步进获取目标框体所在新位置,以新位置的框体作为目标框体,令n自加1,令设定像素增加设定值,执行步骤6.3;若n大于阈值,则选择所包含文本面积最小的显示界面文本区域作为目标框体后执行步骤7。
32.实施例:本实施例中采用本发明提供的一种桌面系统上安卓应用键盘映射辅助提示的显示方法在linux系统的安卓兼容环境内实现了安卓应用的键盘映射辅助提示信息的显示,具体包括以下步骤:s1、用户在linux系统上打开安卓应用时,xdroidui根据键盘映射配置文件判断用户是否已为安卓应用配置并开启了键盘映射功能,包括以下步骤:若判断用户未配置并开启键盘映射功能,则等待用户启动键盘映射配置直到用户进入配置界面并完成配置后,保存安卓应用当前显示界面的截图为image,执行s2;若判断用户已配置并开启键盘映射功能,则执行步骤s2。
33.键盘映射配置文件中包括辅助提示显示方式、按键位置pos及按键键值keyvalue。
34.s2、xdroidui获取安卓应用的窗口句柄、窗口大小以及左顶点位置。
35.s3、xdroidui创建一个qt窗口 qwidget作为辅助提示窗口,并为辅助提示窗口增加标志信息,例如,调用setobjectname()函数将qwidget窗口的objectname属性设置为xdroidkeymappingtip,辅助提示窗口即为xdroidkeymappingtip窗口;再采用qt接口将辅助提示窗口设置为始终置顶显示,设置辅助提示窗口为无边框且背景色透明的窗口;设置辅助提示窗口的大小为s2中获取的窗口大小,设置辅助提示窗口的位置为s2中的左顶点位置,设置辅助提示窗口的父窗口为s2中的窗口句柄。
36.s4、针对linux系统所采用的显示服务器,处理xdroidkeymappingtip窗口的鼠标和键盘事件:如果linux系统的显示服务器支持x11协议,则通过窗口管理器遍历当前所有的窗口找到其中带有xdroidkeymappingtip标志的窗口,采用xshapecombinerectangle函数将带有xdroidkeymappingtip标志的窗口所在的界面区域设置为鼠标穿透区域;如果linux系统的显示服务器支持wayland协议,则通过dbus接口获取到全局的鼠标和键盘事件,鼠标和键盘事件中包含事件类型和位置信息,通过位置信息和s2中获取的窗口大小、左顶点位置即可判断鼠标和键盘事件是否位于xdroidkeymappingtip窗口区域内,如果鼠标和键盘事件不在xdroidkeymappingtip窗口区域内则不处理鼠标和键盘事件,如果鼠标和键盘事件在xdroidkeymappingtip窗口区域内则通过修改wayland窗口管理器将xdroidkeymappingtip窗口区域内的所有鼠标和键盘事件全部发送至xdroidkeymappingtip窗口的父窗口。
37.由此属于xdroidkeymappingtip窗口的所有的鼠标和键盘事件都由其父窗口进行接收,父窗口对应的是安卓应用的当前显示界面,这样就实现了xdroidkeymappingtip窗口的鼠标和键盘事件通过xdroidui发送到安卓兼容环境内。
38.s5、xdroidui读取键盘映射配置文件中的按键位置pos及按键键值keyvalue,并将按键位置pos及按键键值keyvalue保存到变量map中;其中,将keyvalue值转换为文本值text,例如,将keya转换为a,如果keyvalue为多个值如keyshift、keyctrl则将其转换为shift+ctrl。
39.s6、获取变量map中文本值text的显示范围,例如,采用qfontmetrics::boundingrect可获取text对应的显示范围即矩形范围rect;获取键盘映射配置文件中的辅助提示显示方式,若辅助提示显示方式为以框体方式显示则执行s7;若辅助提示显示方式为以文本方式显示则执行s8。
40.s7、根据pos和rect,xdroidkeymappingtip窗口内采用drawroundedrect绘制矩形背景,背景区域的尺寸为rect区域长宽各增加5px的大小、颜色为rgba(100,100,100,0.8),背景区域内居中绘制白色的text文本,由此得到文本居中带透明度背景的矩形区域drawrect,执行s9。
41.s8、由pos和rect确定了矩形区域,在s1中保存的image图层中采用opencv获取该矩形区域对应的所有点的rgb值,计算rgb值的均值,然后对均值取反色值,再根据pos、rect及text值绘制出文本居中完全透明的矩形区域drawrect,drawrect内text文本的颜色值设置为反色值,执行s9。
42.s9、若map中的所有值均被处理则执行s10,否则执行s6。
43.s10、在安卓兼容环境中获取安卓应用当前显示窗口内所有decorview,获取textview及子view中文本的位置信息,通rpc将位置信息发送至xdroidui,xdroidui再将位置信息保存为androidtextrects。
44.s11、获取image图层,通过opencv识别s8中所有drawrect区域中是否包含文本,具体步骤如下:s11.1、比较drawrect与androidtextrects中的区域范围,若drawrect不在androidtextrects范围内,则认为drawrect中可能没有文本,执行s11.2;若drawrect在androidtextrects范围内,则计算以drawrect的中心为中心点的长宽分别为bn个像素点、面积与drawrect相同、不在androidtextrects范围内的矩形区域,若存在这一矩形区域则将drawrect修改为得到的新矩形区域,若不存在则执行s11.3。采用这种方式能够明显降低opencv识别的频率。
45.s11.2、opencv识别drawrect区域是否包含文本,如果包含文本则记录该文本区域为textrect,执行s11.3;如果不包含则保存drawrect为destrect,执行s11.4。
46.s11.3、若i不大于n,则以drawrect区域为中心向四周移动i个像素点,i的取值范围为[1,n],n可动态配置,每次移动i都递增m像素,每移动一次形成新的newdrawrect区域,修改drawrect值为newdrawrect,执行s11.2;若i大于n,则保存所包含文本面积最小的textrect对应的drawrect为destrect。
[0047]
s11.4、若drawrect集合中所有的drawrect均被处理,则得到destrect的集合并执行s12,否则执行s11.1。
[0048]
s12、将destrect区域集合绘制到xdroidkeymappingtip窗口中。
[0049]
本发明针对安卓兼容环境的多窗口模式,提供以下处理方式:监听桌面系统中处于启动状态的安卓应用的窗口焦点事件,当窗口失去焦点时,隐藏xdroidkeymappingtip窗口,当窗口获取焦点时再显示xdroidkeymappingtip窗口。这样既能够实现多窗口模式下仅能有一个窗口进行键盘映射的操作需求,也能解决由于设置了窗口置顶而导致出现当其他窗口叠加到安卓应用窗口之上时该安卓应用的xdroidkeymappingtip窗口仍旧置顶的问题。
[0050]
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1