一种Linux平台上安卓应用文件的发送方法与流程

文档序号:32074331发布日期:2022-11-05 04:07阅读:77来源:国知局
一种Linux平台上安卓应用文件的发送方法与流程
一种linux平台上安卓应用文件的发送方法
技术领域
1.本发明属于桌面操作系统上运行移动应用的开发技术领域,具体涉及一种linux平台上安卓应用文件的发送方法。


背景技术:

2.linux操作系统安卓兼容环境(下文简称安卓兼容环境)是一种在linux操作系统上运行安卓应用的技术,对丰富linux操作系统应用生态有着重要的意义。通常情况下,典型的安卓兼容环境主要包括安卓应用显示单元和安卓应用兼容服务,安卓应用显示单元用于在桌面操作系统上实现安卓应用的用户界面,安卓应用兼容服务用于提供运行于桌面操作系统上的安卓兼容环境,通过安卓应用显示单元与安卓应用兼容服务的相互配合实现安卓应用在桌面操作系统上的有效运行,例如,现有安卓兼容环境的实现方案有xdroid,它包括xdroidui和xdroidserver,xdroidui为安卓应用显示单元,xdroidserver为安卓应用兼容服务,通过xdroid与xdroidui的配合即可实现安卓应用与linux操作系统的兼容。
3.现有的安卓应用一般都会提供一系列供外部调用的功能接口,用于发送消息、分享文件等,这些功能接口一般采用intent方式实现。intent是安卓系统提供的用来协助应用之间交互与通讯的机制,intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,安卓系统则根据intent的描述找到对应的组件,将 intent传递给需要调用的组件,完成组件间的调用。此外,intent还可用于应用程序内部的 activity / service之间的交互,此时intent的作用类似于媒体中介,用于提供组件互相调用的相关信息,从而实现调用者与被调用者之间的解耦。
4.例如微信、qq等安卓应用一般都会提供桌面版和手机版两个安装版本,通常情况下两个版本都支持在安卓应用内通过菜单(或按钮)打开桌面系统的文件对话框选择文件再发送,但是大多数情况下,只有桌面版的安卓应用支持从文件浏览器将文件直接拖拽到安卓应用实现文件发送或分享的方式,然而由于intent模式不支持指定发送对象,因此,当用户希望在安卓兼容环境中使用安卓应用时则可能遇到无法以拖拽方式发送文件的问题,从而降低了用户操作的便利性。


技术实现要素:

5.有鉴于此,本发明提供了一种linux平台上安卓应用文件的发送方法,能够实现在linux系统的安卓兼容环境中以拖拽方式将位于linux系统上的文件发送至安卓应用,同时对用户隐藏操作中间过程。
6.本发明提供的一种linux平台上安卓应用文件的发送方法,包括以下步骤:步骤1、安卓兼容环境获取当前已打开对话界面的活跃安卓应用作为目标应用,获取所述对话界面中对话对象的对象名,建立目标应用的目标应用包名与对象名的映射关系表;步骤2、在linux系统中,当安卓应用显示单元接收到向指定安卓应用拖拽目标文
件的文件拖拽事件消息后,将目标文件传输到安卓兼容环境内,并向安卓兼容环境发送文件发送消息;所述文件发送消息包含所述指定安卓应用的指定应用包名及目标文件在安卓兼容环境中的文件全路径名;步骤3、安卓兼容环境解析所述文件发送消息后,在所述映射关系表中查找与所述指定应用包名相对应的对象名作为指定对象名;构建包含所述指定应用包名及文件全路径名的intent消息,且为intent添加特定标识,将所述intent消息发送至安卓框架;步骤4、安卓框架获取intent消息中的intent的标识,若标识包括flag_activity_new_task及特定标识,则获取安卓兼容环境当前activitystack所对应的应用包名a,当应用包名a与intent对应的指定应用包名相同,且当前activitystack的顶部activity位于linux系统桌面的顶层时,将指定应用的发送对象选择窗口显示在顶部activity中;否则,弹出新建的指定应用的发送对象选择窗口;步骤5、在所述发送对象选择窗口中定位对象名称编辑框,将所述指定对象名输入对象名称编辑框后,模拟鼠标点击搜索结果列表中的第一项;步骤6、监测弹出的确认发送对话框,若所述确认发送对话框位于所述发送对象选择窗口内,则隐藏所述确认发送对话框,模拟鼠标点击确认发送对话框中的确认发送按钮;若确认发送对话框为独立窗口,则显示确认发送对话框,等待用户点击确认发送按钮;步骤7、隐藏返回安卓应用对话框,模拟鼠标点击留在指定安卓应用窗口中的按钮,通知安卓应用显示单元激活指定安卓应用的窗口。
7.进一步地,所述步骤1中安卓兼容环境获取当前已打开对话界面的活跃安卓应用作为目标应用,获取所述对话界面中对话对象的对象名的方式为:安卓兼容环境以监测到的处于活跃状态的安卓应用的作为目标应用,监测当前top activity的切换过程以新activity所在的安卓应用作为顶层应用,若顶层应用的包名与目标应用的包名相同且新activity具有对话界面的标识信息,则获取目标应用的当前对话界面中对话对象的对象名。
8.进一步地,所述新activity具有对话界面的标识信息的判断方式为:步骤1.1、当监测到目标安卓应用切换到了会话activity时,安卓应用显示单元通知安卓兼容环境获取关键view组件的类名及view id;步骤1.2、安卓兼容环境遍历目标安卓应用内除会话activity之外的所有可见视图,将获取到的视图类名和view id信息保存在视图信息列表内;步骤1.3、安卓兼容环境获取会话activity内所有可见视图的类名和view id信息;对于每个可见视图,若视图信息列表中不存在与之完全相同的可见视图,则将其保存在关键视图列表中,否则,不保存该可见视图的信息;步骤1.4、若关键视图列表为空,则执行步骤1.6;否则执行步骤1.5;步骤1.5、拦截decorview函数的onresourcesloaded、onmeasure或onlayout函数监测组件的加载过程,若目标安卓应用运行时加载了关键视图列表中存在的关键view组件,则执行步骤2;否则不做处理;步骤1.6、当目标应用完成了所有view的构建和布局后截取目标应用decorview的函数内容,若函数内容与特征模式相匹配,则执行步骤2;否则不做处理;所述特征模式包括左对齐viewgroup特征模式和右对齐viewgroup特征模式;所述
左对齐viewgroup特征模式是viewgroup的最左侧的第一个可见子视图继承自imageview或包含一个继承自imageview的子视图,且viewgroup内的列表项中存在仅包含符合时间格式的文本的可见文本视图的列表项;所述右对齐viewgroup特征模式是viewgroup的最右侧的第一个可见子视图继承自imageview或包含一个继承自imageview的子视图,且viewgroup内的列表项中存在仅包含符合时间格式的文本的可见文本视图的列表项。
9.进一步地,所述步骤1还包括当安卓兼容环境监测到所述目标应用退出时,在所述映射关系表中删除该目标应用对应的映射关系。
10.进一步地,所述步骤1中获取所述对话界面中对话对象的对象名的方式为:截取所述当前对话界面并识别顶部文本获取对象名称。
11.进一步地,所述步骤4中所述特定标识为flag_activity_reusing_task。
12.进一步地,所述步骤3中所述为intent添加特定标识的方式为:在addflags方法中增加自定义的intent的flag,当创建intent时调用addflags为intent增加flag_activity_new_task和flag_activity_reusing_task标识。
13.有益效果:本发明通过在安卓兼容环境中增加对安卓应用top activity切换过程的监测,能够实时判断安卓应用是否切换到对话界面同时获取对话对象的对象名,通过安卓应用显示单元中增加对linux系统鼠标拖拽事件的响应,当收到鼠标拖拽事件时安卓应用显示单元向安卓兼容环境发送文件发送消息,安卓兼容环境通过解析文件发送消息隐藏完成发送等操作,从而实现了在linux系统的安卓兼容环境中以拖拽方式将位于linux系统上的文件发送至安卓应用的功能,有效提高了用户操作的便利性。
附图说明
14.图1为本发明提供的一种linux平台上安卓应用文件的发送方法的流程图。
具体实施方式
15.下面结合附图并举实施例,对本发明进行详细描述。
16.本发明提供了一种linux平台上安卓应用文件的发送方法,流程如图1所示,具体包括以下步骤:步骤1、安卓兼容环境将监测到的当前活跃安卓应用作为目标安卓应用,获取目标安卓应用的应用包名作为目标应用包名;监测当前top activity的切换过程,获取切换到的新activity所在安卓应用的顶层应用包名,若顶层应用包名与目标应用包名相同,且新activity具有对话界面的标识信息,则认为目标安卓应用切换到了对话界面。
17.具体来说,安卓兼容环境可基于界面布局分析判断目标安卓应用是否切换到了对话界面,具体为:预先提取安卓应用的对话界面的特征模式;当目标安卓应用完成了所有view的构建和布局后截取decorview的函数内容,将得到的函数内容与特征模式进行匹配,若匹配成功,则说明目标安卓应用切换到了对话界面。其中,安卓应用的对话界面的特征模式包括两类:一类是左对齐viewgroup特征模式,左对齐viewgroup是指viewgroup内的每个列表项均为左对齐的viewgroup,则此类viewgroup的特征模式是viewgroup的最左侧的第
一个可见子视图(child view)继承自imageview或者包含一个继承自imageview的子视图,且此类viewgroup内的列表项中存在仅包含符合时间格式的文本的可见文本视图的列表项;另一类是右对齐viewgroup特征模式,右对齐viewgroup是指viewgroup内的每个列表项均为右对齐的viewgroup,则此类viewgroup的特征模式是viewgroup的最右侧的第一个可见子视图(child view)继承自imageview或者包含一个继承自imageview的子视图,且此类viewgroup内的列表项中存在仅包含符合时间格式的文本的可见文本视图的列表项。特征模式的提取可采用机器学习的方法,decorview函数内容的截取可通过拦截decorview的onmeasure和layoutchildren函数来实现。
18.安卓兼容环境还可采用根据关键view组件判断目标安卓应用是否切换到了对话界面的方式,其中,关键view组件是指仅会出现在对话界面中的view,例如,位于界面最下端的编辑框、命令组合框等,具体包括以下步骤:步骤1.1、当安卓应用显示单元监测到目标安卓应用切换到了会话activity,则通知安卓兼容环境获取关键view组件的类名及view id。
19.步骤1.2、安卓兼容环境遍历目标安卓应用内除会话activity之外的所有可见视图,获取这些视图的类名和view id等信息保存为视图信息列表。
20.步骤1.3、安卓兼容环境获取会话activity内的所有可见视图的类名和view id等信息;对于其中每个可见视图,若视图信息列表中不存在与之完全相同的可见视图,则说明该可见视图为关键视图并将其保存在关键视图列表中,否则,不保存该可见视图的信息。
21.步骤1.4、若关键视图列表为空,则执行步骤1.6;否则执行步骤1.5。
22.步骤1.5、拦截decorview函数的onresourcesloaded、onmeasure或onlayout函数监测组件的加载过程,若目标安卓应用运行时加载了关键视图列表中存在的关键view组件,则执行步骤2;否则不做处理。
23.步骤1.6、安卓兼容环境基于界面布局分析判断目标安卓应用是否切换到了对话界面,若切换到了对话界面则执行步骤2;否则不做处理。
24.其中,获取关键view组件的类名及view id的方式可为:采用安卓调试工具adb连接正在运行的安卓应用,通过hierarchy viewer获取关键view组件的类名和view id。
25.步骤2、安卓兼容环境获取目标安卓应用的当前对话界面中对话对象的对象名,并建立目标安卓应用的目标应用包名与对象名的映射关系表;安卓兼容环境监测到目标安卓应用退出时,删除该目标安卓应用的目标应用包名与对象名的映射关系。
26.本发明中,安卓兼容环境获取目标安卓应用的当前对话界面中对话对象的对象名的过程为:监测目标安卓应用的运行过程,当目标安卓应用加载关键view组件时获取组件的文本内容,并将文本内容记录为对象名称。本发明可调用组件的gettext方法获取关键view组件的文本内容,并记录为friend name。
27.此外,本发明还可采用图像识别的方式获取目标安卓应用的当前对话的对象名称,具体来说,对话的对象名称往往位于对话窗口的顶部,因此通过截取对话窗口界面并识别顶部文本即可获取对象名称。本发明还可采用布局识别的方式获取目标安卓应用的当前对话的对象名称,具体来说,获取对话窗口的decorview的view tree,从上到下获取位于最上方的、第一个可见的textview,再调用gettext获取该组件的文本内容,记录为friend name。
28.步骤3、在linux系统中,当用户将待发送的目标文件拖拽到指定安卓应用时,安卓应用显示单元接收到来自linux系统的拖拽事件消息后,将目标文件共享或复制到安卓兼容环境内,并向安卓兼容环境发送文件发送消息。文件发送消息中包含指定安卓应用的指定应用包名及目标文件在安卓兼容环境中的全路径名。
29.其中,本发明可采用qt等ui库实现linux系统中对linux系统鼠标拖拽事件的感知。对于较小的目标文件,安卓应用显示单元可将目标文件直接复制到安卓兼容环境内;对于较大的目标文件,安卓应用显示单元可采用在linux上安卓文件系统所在目录中创建链接指向目标文件实现安卓兼容环境对目标文件的共享,这种方法可以避免文件复制的操作。
30.步骤4、安卓兼容环境解析接收到的文件发送消息后,在映射关系表中查找与指定应用包名相同的目标应用包名的映射关系,获取指定安卓应用当前对话窗口的指定对象名;安卓兼容环境以指定应用包名及目标文件的全路径名构建intent消息,该intent消息用于发送文件,且为该intent添加特定标识;安卓兼容环境将intent消息发送至安卓框架。
31.现有安卓系统中,在创建intent时需要调用addflags (intent.flag_activity_new_task)添加flag,所以发送文件的操作会创建一个新的任务,然而在多窗口模式下,创建新任务将会导致新建一个linux窗口,从而引发窗口焦点切换影响用户体验。因此,为了改善用户体验,需要让新建的任务能够重用目标安卓应用当前的会话activity,而不是再新建窗口。本发明通过利用flag_activity_new_task让目标应用正常工作,同时重用目标应用当前的top activity而不是新建task和activity,具体来说,本发明提供了以下构建intent消息的方式,包括安卓兼容环境在创建intent时为其添加特定标识,再创建intent相关的任务,以标识其所在的任务。
32.具体来说,可以通过在addflags方法中增加自定义的intent的flag以实现为intent增加特定标识,如增加flag_activity_reusing_task标识,此时,intent除了本身新建时具有的flag_activity_new_task以外还带有flag_activity_reusing_task的flag。
33.步骤5、安卓框架接收到intent消息后,获取intent消息中的intent的标识,若标识包括flag_activity_new_task及特定标识,则获取安卓兼容环境当前activitystack所对应的应用包名a,若应用包名a与intent对应的指定应用包名相同,且当前activitystack的顶部activity位于linux系统桌面的顶层,则将指定应用的发送对象选择窗口显示在顶部activity中;否则,弹出新建的指定应用的发送对象选择窗口。
34.具体来说,修改activitystarter的getreusableintentactivity方法,在方法getreusableintentactivity执行时判断,若intent同时设置了标签flag_activity_new_task和flag_activity_reusing_task,则强制调用activitystack的findtasklocked方法。
35.同时,修改findtasklocked方法的执行过程为:当flag_activity_new_task和flag_activity_reusing_task同时被设置时,若当前activitystack对应的应用包名与intent消息中的目标应用的包名相同,且当前activitystack的顶部activity不为空,则返回top activity;否则返回null。
36.步骤6、安卓兼容环境在发送对象选择窗口中搜索定位对象名称编辑框,并将步骤4中获取到的指定对象名输入对象名称编辑框中;当监测到发送对象选择窗口的布局变化时,说明发送对象选择窗口中已显示搜索结果,安卓兼容环境在发送对象选择窗口中搜索
定位搜索结果列表,并模拟鼠标点击搜索结果列表中的第一项。
37.在安卓系统中,当安卓应用接收到用于发送文件的intent消息后,通常会弹出发送对象选择窗口用于确定文件发送对话对象,此时,用户在发送对象选择窗口的对象名称编辑框中输入文件发送的对象名,此后发送对象选择窗口的对象名称编辑框的下方会显示搜索结果列表,通常排在第一位的是最匹配的结果,也就是与名称编辑框中输入的内容相同的对象名称,用户在搜索结果列表中选中需要发送的对象名,一般来讲在用户选中对象名后安卓系统会弹出确认发送的对话框,有用户点击确认发送按钮完成文件的发送。
38.此外,某些安卓应用的发送对象选择窗口中,当用户在对象名称编辑框中输入内容后,还需要用户点击搜索确认按钮启动搜索,对于这类情况,本发明通过在步骤6的安卓兼容环境在发送对象选择窗口中搜索定位对象名称编辑框的同时增加对搜索确认按钮的搜索,如果存在,则在将步骤4中获取到的指定对象名输入对象名称编辑框中后,模拟鼠标点击搜索确认按钮。
39.步骤7、安卓兼容环境监测当前的确认发送对话框,若确认发送对话框位于发送对象选择窗口内,则隐藏确认发送对话框,并在确认发送对话框中搜索定位确认发送按钮后,模拟鼠标点击确认发送按钮,以将目标文件发送至指定安卓应用,此时目标文件将在指定安卓应用的窗口中显示;若确认发送对话框为独立窗口,则显示确认发送对话框,等待用户点击确认发送按钮,以将目标文件发送至指定安卓应用,此时目标文件将在指定安卓应用的窗口中显示。
40.现有安卓系统的安卓应用中,当用户在确认发送对话框中点击确认发送按钮后,安卓系统通常会弹出返回某个安卓应用的对话框。
41.步骤8、安卓兼容环境隐藏返回安卓应用对话框,并模拟鼠标点击留在指定安卓应用窗口中的按钮,通知安卓应用显示单元激活指定安卓应用的窗口。
42.在现有安卓系统中,通常用户在发送确认对话框中点击确认发送后会弹出是否返回安卓应用的对话框,为了让用户感知不到窗口的跳转过程提高操作的流畅性,本发明可修改android系统的是否返回安卓应用的对话框,当该对话框是由文件拖拽事件触发时,则默认执行留在目标安卓应用的操作,并且隐藏该对话框,模拟鼠标点击留在指定安卓应用窗口中的按钮,然后通过xdroidui激活目标应用窗口。
43.综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1