指令传输方法、装置、可读介质及电子设备与流程

文档序号:33322583发布日期:2023-03-03 21:25阅读:34来源:国知局
指令传输方法、装置、可读介质及电子设备与流程

1.本公开涉及指令传输领域,具体地,涉及一种指令传输方法、装置、可读介质及电子设备。


背景技术:

2.悬浮窗是现有电子设备中常见的一种视窗(窗口)表现形式,通过以透明或半透明的方式悬浮于终端界面上,向用户提供应用程序的一些扩展业务功能,在游戏场景中,为了满足玩家的端内看播需求,也可以在游戏软件的界面上通过悬浮窗的方式向玩家呈现游戏直播或者其它多媒体信息,例如,针对海外mmorpg类、卡牌类、slg类等游戏品类,玩家均有端内看播需求。
3.当前手机游戏端内看播的实现方案中,多为游戏进程内提供看播入口,点击入口后拉起内置h5浏览器或其他页面,加载相应播放器,但玩家在端内完成看播动作和持续游戏动作往往只能二选一,这会影响用户体验;并且这会占用游戏的内存空间,从而影响游戏软件的正常运行。


技术实现要素:

4.提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。
5.第一方面,本公开提供一种指令传输方法,所述方法包括:
6.接收用户对预设浮窗应用的触控操作,所述预设浮窗应用为终端的目标应用软件上的浮窗应用,所述终端包括主进程和子进程,所述主进程为运行所述目标应用软件的进程,所述子进程为所述预设浮窗应用对应的进程;
7.获取所述触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的所述触控操作对应的触控事件;
8.根据所述跨进程传输对象通过所述主进程获取触控指令,并通过所述主进程将所述触控指令传输至所述子进程;
9.在所述子进程对所述触控指令进行指令重放后,将指令执行结果渲染至所述主进程。
10.第二方面,本公开提供一种指令传输装置,所述装置包括:
11.接收模块,用于接收用户对预设浮窗应用的触控操作,所述预设浮窗应用为终端的目标应用软件上的浮窗应用,所述终端包括主进程和子进程,所述主进程为运行所述目标应用软件的进程,所述子进程为所述预设浮窗应用对应的进程;
12.获取模块,用于获取所述触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的所述触控操作对应的触控事件;
13.指令传输模块,用于根据所述跨进程传输对象通过运行所述主进程获取触控指
令,并通过所述主进程将所述触控指令传输至所述子进程;
14.渲染模块,用于在所述子进程对所述触控指令进行指令重放后,将指令执行结果渲染至所述主进程。
15.第三方面,本公开提供一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现本公开第一方面所述方法的步骤。
16.第四方面,本公开提供一种电子设备,包括:
17.存储装置,其上存储有计算机程序;
18.处理装置,用于执行所述存储装置中的所述计算机程序,以实现本公开第一方面所述方法的步骤。
19.通过上述技术方案,接收用户对预设浮窗应用的触控操作,所述预设浮窗应用为终端的目标应用软件上的浮窗应用,所述终端包括主进程和子进程,所述主进程为运行所述目标应用软件的进程,所述子进程为所述预设浮窗应用对应的进程;获取所述触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的所述触控操作对应的触控事件;根据所述跨进程传输对象通过运行所述主进程获取触控指令,并通过所述主进程将所述触控指令传输至所述子进程;在所述子进程对所述触控指令进行指令重放后,将指令执行结果渲染至所述主进程,这样既实现了触控指令的跨进程传输,使用子进程运行目标应用软件上的预设浮窗应用,减少了对目标应用软件的内存占用,同时实现了目标应用软件和预设浮窗应用的同时运行,例如,若该目标应用软件为手机游戏,该预设浮窗应用为游戏软件上的浮窗直播产品,浮窗直播与手机游戏可以同时运行,从而满足了玩家在畅玩过程中,同时兼顾看播的娱乐需求。
20.本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
21.结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。在附图中:
22.图1是根据一示例性实施例示出的一种指令传输方法的流程图;
23.图2是根据一示例性实施例示出的一种触控指令跨进程传递的过程示意图;
24.图3是根据图1所示实施例示出的一种指令传输方法的流程图;
25.图4是根据一示例性实施例示出的前台输入框与后台输入框的场景示意图;
26.图5是根据一示例性实施例示出的基于jsb通信机制的文本输入指令的跨进程传输过程示意图;
27.图6是根据图1所示实施例示出的一种指令传输方法的流程图;
28.图7是根据一示例性实施例示出的基于hook机制的文本输入指令的跨进程传输过程示意图;
29.图8是根据一示例性实施例示出的一种指令传输装置的框图;
30.图9是根据图8所示实施例示出的一种指令传输装置的框图;
31.图10是根据图8所示实施例示出的一种指令传输装置的框图;
32.图11是根据图8所示实施例示出的一种指令传输装置的框图;
33.图12是根据一示例性实施例示出的一种电子设备的结构框图。
具体实施方式
34.下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
35.应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
36.本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
37.需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
38.需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
39.本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
40.可以理解的是,在使用本公开各实施例公开的技术方案之前,均应当依据相关法律法规通过恰当的方式对本公开所涉及个人信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
41.例如,在响应于接收到用户的主动请求时,向用户发送提示信息,以明确地提示用户,其请求执行的操作将需要获取和使用到用户的个人信息。从而,使得用户可以根据提示信息来自主地选择是否向执行本公开技术方案的操作的电子设备、应用程序、服务器或存储介质等软件或硬件提供个人信息。
42.作为一种可选的但非限定性的实现方式,响应于接收到用户的主动请求,向用户发送提示信息的方式例如可以是弹窗的方式,弹窗中可以以文字的方式呈现提示信息。此外,弹窗中还可以承载供用户选择“同意”或者“不同意”向电子设备提供个人信息的选择控件。
43.可以理解的是,上述通知和获取用户授权过程仅是示意性的,不对本公开的实现方式构成限定,其它满足相关法律法规的方式也可应用于本公开的实现方式中。
44.同时,可以理解的是,本技术方案所涉及的数据(包括但不限于数据本身、数据的获取或使用)应当遵循相应法律法规及相关规定的要求。
45.本公开主要应用于对用户在悬浮窗上触发的指令进行跨进程的指令传输的场景中,相关技术中,为了满足用户在手机游戏的端内看播需求,通常会在游戏的主进程内提供看播入口,用户点击入口后在主进程内拉起内置h5浏览器或其他页面,加载相应播放器,但这会占用游戏的内存空间,从而影响游戏软件的正常运行。
46.为解决上述存在的问题,减少对游戏内存的占用,本公开中的悬浮窗采用了类似client/server模型,把悬浮窗的画面展示和实际逻辑运行拆分成了主进程和子进程,其中,负责悬浮窗前台画面展示的surfaceview(可以理解为“画布视窗”)位于主进程,surfaceview仅仅起到画面展示作用,悬浮窗上承载实际播放逻辑的view(一般是webview(可以理解为网页视窗),但也可以是其他view)在后台子进程运行。
47.考虑到直播页面上还会存在一些用户交互,这些交互需要通过一系列指令来完成,比较典型的场景比如点击按钮事件、滑动事件、输入文本事件等,但是,surfaceview默认仅有展示图形能力,其对触控事件(即用户用手指从按下屏幕到松开屏幕过程中产生的一系列指令)不做处理,无法将用户的触控、拖拽、点击等触屏指令传递到后台的子进程webview,进而导致了用户无法拖动页面、无法点击按钮等问题。除了触控事件,还有文本输入事件对应的输入指令需要传递,但后台webview无法接收到输入指令,且webview不在前台,无法获取焦点,不允许弹出输入法,因此包括唤起输入法、键入文本、移动光标、删改文本,提交表单等操作都无法执行。
48.为解决上述存在的问题,本公开提供一种指令传输方法、装置、可读介质及电子设备,该方法可以应用于终端,终端包括主进程和子进程,其中主进程为运行目标应用软件的进程,该目标应用软件例如可以为游戏软件,所述子进程为所述目标应用软件上预设浮窗应用对应的进程,该预设浮窗应用例如可以为游戏软件上的浮窗直播产品,这样,在获取到用户对预设浮窗应用的触控操作的情况下,获取触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的触控操作对应的触控事件;根据跨进程传输对象通过主进程获取触控指令,并通过主进程将所述触控指令传输至子进程;在子进程对触控指令进行指令重放后,通过执行预设渲染方法将指令执行结果渲染至主进程,这样既实现了触控指令的跨进程传输,使用子进程运行目标应用软件上的预设浮窗应用,减少了对目标应用软件的内存占用,同时实现了目标应用软件和预设浮窗应用的同时运行,例如,若该目标应用软件为手机游戏,该预设浮窗应用为游戏软件上的浮窗直播产品,浮窗直播与手机游戏可以同时运行,从而满足了玩家在畅玩过程中,同时兼顾看播的娱乐需求。
49.下面结合附图对本公开的具体实施方式进行详细说明。
50.图1是根据一示例性实施例示出的一种指令传输方法的流程图,该方法可以应用于装配有android系统的终端(如手机),该终端包括主进程和子进程,其中主进程为运行目标应用软件的进程,所述子进程为所述目标应用软件上预设浮窗应用对应的进程;如图1所示,该方法包括以下步骤:
51.在步骤s101中,接收用户对预设浮窗应用的触控操作。
52.其中,该预设浮窗应用是指在终端上的目标应用软件的界面上以浮窗形式呈现的应用,该目标应用软件例如可以为手机游戏软件,该预设浮窗应用例如可以为该手机游戏软件上的浮窗直播产品。该触控操作例如可以包括点击操作、滑动操作等。
53.在步骤s102中,获取触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的触控操作对应的触控事件。
54.其中,该触控事件通常是指在该预设浮窗应用的界面上用户用手指按下屏幕到松开屏幕过程中产生的一系列触控指令。
55.上述已经提及,为了减少预设浮窗应用对目标应用软件的内存占用,将预设浮窗
应用的画面展示和实际逻辑运行拆分成了主进程和子进程,其中,负责预设浮窗应用前台画面展示的surfaceview(可以理解为“画布视窗”)位于主进程,surfaceview仅仅起到画面展示作用,预设浮窗应用上承载实际逻辑运行的view(一般是网页视窗webview)在后台子进程运行,因此,主进程包括画布视窗surfaceview,surfaceview用于展示所述预设浮窗应用的画面。
56.在本公开中由于surfaceview仅用于显示位于后台子进程webview的渲染结果,surfaceview本身并不响应这些触控事件,因此需要将触控事件传递给子进程的webview处理。这里表征当前的触控操作对应的触控事件的跨进程传输对象可以包括第一预设对象,该第一预设对象例如可以包括touchevent对象(即android中的motionevent类),该第一预设对象用于记录当前的触控操作对应的触控参数(如触控事件的类型、触控事件的调用顺序、触控位置等),由于android系统中的touchevent处理机制本身就是跨进程的,touchevent对象实现了parcelable接口(可以实现序列化的接口),因此可以支持跨进程传递。
57.另外,一个touchevent对象通常包含以下信息:
58.1)事件类型:指当前触控事件的具体含义,如按下down、移动move、抬起up。示例地,当手指在屏幕上滑动一下时,系统会产生一系列的触控事件对象,每个对象所代表的触控事件有所不同,有的事件代表手指按下这个动作,有的事件代表手指在屏幕上滑动,还有的事件代表手指离开屏幕,这些事件的事件类型就分别为action_down,action_move,和action_up。上述动作所产生的一系列事件,被称为一个事件流,该事件流包括一个action_down事件,零个或者多个action_move事件,和一个action_up事件。
59.2)触控事件的调用顺序:当一根手指在屏幕上时,又有另一手指按下屏幕,抬起事件up和按下事件down会改为action_pointer_down和action_pointer_up事件类型,示例地,假设用户在屏幕上的一系列的触控操作为:在屏幕上先按下一个手指,再按下一个手指,然后同时滑动,然后抬起一个手指,再抬起一个手指,此时触控事件的调用顺序为:
60.action_down

action_pointer_down

action_move

action_pointer_up

action_up。
61.3)当前触控事件的触控位置:以被按下的view的左上角为原点(0,0),当前触控事件距离原点的x轴距离或y轴距离,以及以终端屏幕的左上角为原点(0,0),当前触控事件距离原点的x轴距离或y轴距离。
62.4)按压力度和/或接触面积大小。
63.上述对一个touchevent对象具备包含的信息包括但不限于上述的信息,此处仅是举例说明,本公开对此不作限定。
64.在步骤s103中,根据跨进程传输对象通过主进程获取触控指令,并通过主进程将触控指令传输至子进程。
65.一种可能的实现方式中,当用户触控浮窗时,会被位于system_server(系统进程)的windowmanagerservice(系统服务)监听到,windowmanagerservice把触控事件分发给主进程中的surfaceview,因此在本步骤中,系统服务可以调用surfaceview的ontouchevent方法,其中,ontouchevent方法为预先设置的用于获取触控指令的方法(即预设指令获取方法),这样可以将touchevent对象传入ontouchevent方法后获取到当前的触控事件对应的
触控指令。
66.在获取到该触控指令后,主进程可以将该触控指令跨进程传输至该子进程,其中,该子进程包括主进程指令接收组件以及网页视窗webview,该主进程指令接收组件用于接收主进程发送的指令,该主进程指令接收组件例如可以为viewrenderservice服务。
67.一种实现方式中,主进程可以通过预设aidl(android interface definition language,android接口定义语言)机制将所述触控指令从所述surfaceview跨进程传输至所述主进程指令接收组件;然后通过所述主进程指令接收组件将所述触控指令传输至所述webview,其中,预设aidl机制为android系统提供的跨进程传输工具。
68.需要说明的是,本公开中的webview通常是指可以加载html5网页的组件,其本质上是加载了浏览器核心的视窗,而浏览器核心可以翻译解释html+css编程语言。
69.在步骤s104中,在子进程对触控指令进行指令重放后,将指令执行结果渲染至主进程。
70.一种可能的实现方式中,可以通过预设渲染方法将指令执行结果渲染至主进程,该预设渲染方法例如可以为android系统提供的draw方法。
71.在本步骤中,子进程可以通过以下方式进行指令重放:
72.通过所述网页视窗webview加载所述预设浮窗应用对应的h5页面;通过所述h5页面对所述触控指令进行指令重放。
73.示例地,图2是根据一示例性实施例示出的一种触控指令跨进程传递的过程示意图,如图2所示,在主进程打开预设浮窗应用时,主进程surfaceview会调用相应的方法(如surfaceview上的bindservice方法)建立主进程和子进程的通信通道,当用户触控浮窗时,会被位于system_server(系统进程)进程的windowmanagerservice(系统服务)监听到,windowmanagerservice把触控事件分发给主进程中的surfaceview,之后调用surfaceview的ontouchevent方法,并将表示当前触控事件的touchevent对象传入该ontouchevent方法(可以理解为获取到了触控指令),之后可以在surfaceview的ontouchevent方法里通过前面获取到的binder对象把touchevent对象传递到子进程的viewrenderservice,再经过viewrenderactivity将该touchevent对象传递到webview进行处理。webview在接收到主进程传输的触控指令后,可以进行指令重放,例如,可以通过调用handletouchevent方法进行指令重放后,完成touchevent的处理,之后webview渲染的内容发生改变,在webview的draw方法执行时,会渲染到主进程surfaceview上将事件的响应结果展现给用户,例如,用户触发的是一个菜单弹出按钮的情况下,在webview的draw方法执行时,会将菜单弹出按钮对应的菜单显示至主进程surfaceview上,上述示例仅是举例说明,本公开对此不作限定。
74.采用上述方法,实现了触控指令的跨进程传输,使用子进程运行目标应用软件上的预设浮窗应用,减少了对目标应用软件的内存占用,也实现了目标应用软件和预设浮窗应用的同时运行,例如,若该目标应用软件为手机游戏,该预设浮窗应用为游戏软件上的浮窗直播产品,浮窗直播与手机游戏可以同时运行,从而满足了玩家在畅玩过程中,同时兼顾看播的娱乐需求。
75.另外,实际的指令传输场景中,除了触控事件,还有文本输入事件的指令需要进行跨进程传输,由于webview不在前台,无法获取焦点,逻辑上不允许弹出输入法,因此包括唤起输入法、键入文本、移动光标、删改文本,提交表单等操作都无法执行,均需要特殊处理,
由主进程的view拉起输入法并接收输入事件,再将输入事件传递到子进程webview进行处理。
76.为了实现对文本输入事件的跨进程传输,在本公开一种可能的实现方式中,可以基于jsb(javascript-bridge)机制实现,其中jsb机制具体指的是ios、android等native端和webview通信的桥梁,在本公开中,jsb即android和h5页面交互的桥梁,可以是android调用h5方法,也可以是h5页面调用android方法。基于jsb机制实现文本输入指令的跨进程传输的具体实现方式如图3所示的实施例。
77.子进程还包括与所述webview进行数据传输的前端h5页面,图3是根据图1所示实施例示出的一种指令传输方法的流程图,如图3所示,该方法还包括以下步骤:
78.在步骤s105中,在触控指令为对预设浮窗应用的第一输入框的点击指令的情况下,若前端h5页面根据点击指令获取到第一输入框的焦点,通过jsbridge通信机制将点击指令传输至网页视窗。
79.其中,该第一输入框是指预设浮窗应用界面上的浮窗输入框,该第一输入框可以理解为是网页视窗webview上输入框的镜像输入框。
80.由于对该第一输入框的点击操作也属于触控操作,因此,点击该第一输入框的点击指令即为触控指令,因此可以按照步骤s101-s103的方式由主进程向子进程跨进程传输该点击指令,这样,子进程上与webview进行数据传输的前端h5页面即可获取到该点击指令,然后根据该点击指令获取到用户触发该第一输入框后该第一输入框上的焦点,由于webview属于客户端,客户端与前端h5页面的通信,需要基于jsb机制实现,即前端h5页面根据在获取到第一输入框的焦点后,可以通过jsbridge通信机制(例如,定义一个名为onfocuschange的jsb)将点击指令传输至webview,webview再将点击第一输入框的点击事件传输到前台surfaceview处,使得前台弹出输入框后完成主进程和子进程之间的文本指令同步。
81.在步骤s106中,网页视窗通过预设aidl机制将点击指令跨进程传输至主进程。
82.webview将点击指令传输至主进程的surfaceview,也属于跨进程的指令传输,因此,一种实现方式中,webview可以通过预设aidl机制将点击指令跨进程传输至主进程。
83.在步骤s107中,主进程接收到点击指令后,在主进程上添加第二输入框。
84.考虑到要在主进程拉起预设输入法,需要有能处理该预设输入法的视窗view,因此,可以在主进程上添加一个edittext(文本输入框,例如可以为一像素的edittext),通过新添加的edittext可以用来拉起输入法并接收输入事件,也就是说,该第二输入框例如可以为添加在预设浮窗应用的界面上的edittext,并且用户对于一像素的edittext视觉感知较弱,一像素不会对用户产生影响,当用户点击预设浮窗应用上的第一输入框时,可以触发通过edittext去拉起预设输入法。
85.在步骤s108中,通过第二输入框打开预设输入法。
86.有了能显示输入法的view,子进程的webview在获取到前端基于jsb机制传输的对第一输入框的点击事件后,可以将事件跨进程传递到主进程,主进程收到后就通过edittext(即第二输入框)打开该预设输入法。
87.示例地,图4是根据一示例性实施例示出的前台输入框与后台输入框的场景示意图,如图4所示,一像素的edittext添加在主进程上,位于后台的webview上有一个html定义
的输入框即为本公开中的“页面输入框”,前台位于预设浮窗应用的第一输入框即为与后台webview上的页面输入框互为镜像的输入框。
88.采用上述方法,用户在点击预设浮窗应用的第一输入框后,可以通过主进程拉起输入法,为后续的文本输入提供输入环境。
89.在拉起该预设输入法以后,用户即可利用该预设输入法输入文本内容,但是由于输入法是通过edittext打开的,在输入法上输入的内容仅会展示到edittext上,并没有显示在webview上,因此,需要将输入的文本内容同步到webview对应的页面输入框(本公开中的“页面输入框”可以理解为是预设浮窗应用上第一输入框的镜像输入框,在该页面输入框内显示的内容会同步至前台的该第一输入框上向用户展示)上。
90.因此,如图3所示,该方法还包括以下步骤:
91.在步骤s109中,通过第二输入框接收目标输入文本,并通过预设aidl机制将目标输入文本传输至webview。
92.示例地,主进程可以监听第二输入框edittext的内容变化,用户输入的时候,内容发生改变,将改变的内容(即该目标输入文本)跨进程传递到子进程的webview。
93.在步骤s110中,webview通过jsbridge通信机制将目标输入文本添加至前端h5页面的页面输入框后,通过执行所述预设渲染方法将目标输入文本渲染至第一输入框。
94.例如,可以预先定义一个名为inputtext的jsbridge通信机制,webview通过调用inputtext将该目标输入文本添加至前端h5页面的页面输入框,在webview的draw方法执行时,即将该目标输入文本渲染至前台的第一输入框向用户展示,此处仅是举例说明,本公开对此不作限定。
95.实际的应用场景中,当用户点击页面上的发布或者是清空这类按钮时,页面输入框上的内容会主动发生改变,但由于edittext和页面输入框上内容不同步,用户再次输入的时候就是出现显示错误的问题,因此还需要将文本内容进行前端的页面输入框

子进程webview

主进程edittext的反向内容同步。
96.因此,如图3所示,该方法还包括以下步骤:
97.在步骤s111中,在触控指令用于表征对预设浮窗应用的消息发布按钮的触发操作的情况下,在对触控指令进行指令重放后,若前端h5页面的页面输入框内的显示内容发生变化,通过jsbridge通信机制将页面输入框内变化后的目标显示内容传输至webview。
98.其中,这里的该jsbridge通信机制例如可以为预先定义的onchangeinputtext。
99.在步骤s112中,webview通过预设aidl机制将目标显示内容跨进程传输至第二输入框,以便将第二输入框内当前显示的内容修改为目标显示内容。
100.基于步骤s111-s112,在页面输入框上的内容发生改变后,可以实现前端的页面输入框

子进程webview

主进程edittext的反向内容同步,既保证edittext内的内容和页面输入框上的内容同步。
101.示例地,图5是根据一示例性实施例示出的基于jsb通信机制的文本输入指令的跨进程传输过程示意图,如图5所示,终端包括系统进程、主进程和子进程,其中系统进程上有inputmethodservice服务(输入法的管理服务,用户在输入法上的操作,均会由inputmethodservice服务监听到,然后将输入事件传递至对应的view处理),主进程包括surfaceview、用于拉起输入法的edittext以及负责与子进程进行通信的mainservice服
务,子进程包括负责与主进程进行通信的viewrenderservice服务、webview以及与webview进行数据交互的前端(h5页面),这样,用户点击了第一输入框在surfaceview中的所在坐标位置之后,可以基于触控指令的跨进程传递过程(调用ontouchevent方法)由主进程向子进程跨进程传输该点击指令,子进程上与webview进行数据传输的前端h5页面即可获取到该点击指令,然后根据该点击指令获取到用户触发该第一输入框后,该第一输入框上的焦点,前端h5页面可以通过jsbridge通信机制将点击指令传输至webview,webview再将点击第一输入框的点击事件传输到前台surfaceview处,使得前台通过edittext拉起输入法,之后主进程可以通过edittext接收用户输入的目标输入文本,然后将目标输入文本通过预设aidl机制传输至webview,webview通过调用inputtext方法(一种预先定义的jsbridge通信机制)将该目标输入文本添加至前端h5页面的页面输入框,在webview的draw方法执行时,即将该目标输入文本渲染至前台的第一输入框向用户展示;之后,用户在点击了发布按钮后,子进程webview的页面输入框上的内容会主动发生改变(基于触控事件的传递过程实现),子进程的前端可以通过jsbridge通信机制将页面输入框内变化后的目标显示内容传输至webview,webview通过预设aidl机制将所述目标显示内容跨进程传输至所述第二输入框,以便将所述第二输入框内当前显示的内容修改为所述目标显示内容,从而实现了主进程和子进程之间的文本指令同步,上述示例仅是举例说明,本公开对此不作限定。
102.基于上述的jsb通信机制,可以实现主进程和子进程之间的文本指令同步,并且jsb是通用方案,android系统兼容性相对较优,但是需要网站开发者配合,无法兼容第三方网页,并且流程较复杂,需要定义一系列行为,弹出输入法、文本同步等问题,基于jsb通信机制实现文本输入指令的传输时,无法感知edittext上的光标移动,因此对于光标移动指令无法实现。
103.考虑到jsb方案存在上述一些缺陷,在本公开另一种可能的实现方式中,可以通过hook系统代码运行流程,破除webview关于不在前台无法弹出输入法的限制。
104.图6是根据图1所示实施例示出的一种指令传输方法的流程图,所述终端还包括系统进程,所述系统进程包括接收触控事件的系统服务,该系统服务例如可以为inputmethodservice服务,所述主进程上添加有用于打开预设输入法的第二输入框,所述子进程包括预先设置的输入事件管理对象以及hook代理对象,如图7所示,该输入事件管理对象可以为子进程中的inputmethodmanager,该hook代理对象可以为子进程中的imsproxy,其中,该hook代理对象为所述输入事件管理对象中aidl接口的代理对象,这样,当子进程中的inputmethodmanager与系统服务inputmethodservice通信时,可以调用imsproxy的对应方法。其中,输入事件管理对象用于调用webview的oncreateinputconnection方法创建第二预设对象(如inputconnection对象),该第二预设对象用于接收输入法指令。
105.需要说明的是,若在子进程中未添加该hook代理对象(如图7中的“imsproxy”),inputmethodmanager直接与inputmethodservice进行通信,由于子进程webview在后台,无法打开输入法,在子进程中添加该hook代理对象imsproxy后,imsproxy在收到对应方法调用时,并非直接通过webview打开输入法,而是通过主进程的edittext打开输入法,从而可以打开预设输入法。
106.因此,如图6所示,该方法还包括以下步骤:
107.在步骤s113中,在触控指令为对预设浮窗应用的第一输入框的点击指令的情况下,hook代理对象通过预设aidl机制向主进程传输第一方法调用指令,该第一方法调用指令用于指示主进程调用系统服务的预设开启方法,该预设开启方法用于打开预设输入法。
108.其中,该预设开启方法例如可以为inputmethodservice的showsoftinput方法。
109.本步骤中也可以基于步骤s101-s103的方式将对预设浮窗应用的第一输入框的点击指令跨进程传输至子进程的webview。
110.在步骤s114中,主进程在接收到第一方法调用指令后,通过第二输入框打开预设输入法。
111.如图7所示,主进程在接收到调用showsoftinput方法的第一方法调用指令后,可以通过edittext拉起该预设输入法。
112.另外,位于主进程的edittext在打开预设输入法时,会创建一个inputconnection对象,该inputconnection对象用于连接输入法和edittext,其中,这里的inputconnection对象是一个接口,主要用来与系统进程的输入服务inputmethodservice进行交互的,每个能使用输入法的view都需要实现这个接口,当view需要打开输入法时,系统会调用view上预先重写后的oncreateinputconnection方法创建inputconnection对象,并且inputconnection对象中定义了输入操作方法,用户在输入法上的一些触发操作,例如输入、光标滑动、删除等操作,系统会调用inputconnection对象的相应方法,将输入指令通知对应的view。
113.在本公开中,输入法通过inputconnection对象传递的输入指令需要传输至子进程的webview,因此webview也需要创建inputconnection对象,用于建立与输入法的连接,edittext和webview均可以通过调用重写后的oncreateinputconnection方法创建该inputconnection对象,但由于后台的webview无法获取焦点,这会造成webview无法调用重写的oncreateinputconnection方法创建inputconnection对象,为解决该问题,对于android api19及以后版本的系统,window类存在一个setlocalfocus接口用于设置本地焦点,通过该接口可以使得window具备焦点;android api19以前的系统可以通过反射将预设关键字段进行修改(如将mservedview及mnextservedview这两个关键字段改成webview),从而可以使得webview的oncreateinputconnection成功被调用,进而使得webview可以创建一个inputconnection对象。
114.因此,如图6所示,该方法还包括以下步骤:
115.在步骤s115中,在触控指令为对预设浮窗应用的第一输入框的点击指令的情况下,通过子进程的输入事件管理对象创建第二预设对象,该第二预设对象用于接收输入法指令。
116.该第二预设对象例如可以包括inputconnection对象,这样,子进程的输入事件管理对象可以通过调用webview的oncreateinputconnection方法创建inputconnection对象。
117.在步骤s116中,通过webview将对象创建指令跨进程传递至主进程的第二输入框,对象创建指令用于指示第二输入框创建第二预设对象。
118.在步骤s117中,第二输入框在接收到对象创建指令后,通过主进程的输入事件管理对象创建第二预设对象。
119.在本步骤一种实现方式中,主进程的输入事件管理对象可以通过调用第二输入框的oncreateinputconnection方法创建inputconnection对象。
120.这样,在webview和第二输入框均创建inputconnection对象,并且通过第二输入框打开预设输入法后,即可将主进程edittext的inputconnection对象接收到的指令通过跨进程传递到子进程webview的inputconnection对象,从而实现了主进程和子进程之间输入指令的传递。
121.因此,如图6所示,该方法还包括以下步骤:
122.在步骤s118中,在接收到用户触发的输入指令的情况下,系统服务通过调用第二输入框的第二预设对象将输入指令跨进程传输至主进程的第二输入框,输入指令为根据用户使用预设输入法在第一输入框上的输入操作生成的指令。
123.在步骤s119中,第二输入框将输入指令跨进程传输至webview的第二预设对象。
124.在步骤s120中,webview对输入指令进行指令重放后,通过执行预设渲染方法将指令执行结果渲染至所述主进程。
125.主进程和子进程的指令传输完成后,一种场景中,若用点击了第一输入框之外的其它区域,或者用户触发了消息发布按钮的情况下,该第一输入框中的焦点消失,此种情况下可以关闭该预设输入法,在本公开中,可以通过如下的步骤关闭该预设输入法。
126.如图6所示,该方法还包括以下步骤:
127.在步骤s121中,在触控指令用于表征对预设浮窗应用的消息发布按钮的触发操作的情况下,在对触控指令进行指令重放后,hook代理对象通过预设aidl机制向主进程传输第二方法调用指令,第二方法调用指令用于指示主进程调用系统服务的预设关闭方法。
128.其中,该预设关闭方法用于关闭预设输入法,该预设关闭方法例如可以为inputmethodservice的hidesoftinput方法。
129.在步骤s122中,主进程在接收到第二方法调用指令后,通过第二输入框关闭预设输入法。
130.主进程在接收到所述第二方法调用指令后,可以通过edittext执行关闭预设输入法的操作。
131.基于上述的hook方案,可以实现主进程和子进程之间的输入指令的传输,并且输入法的输入逻辑、光标控制等指令由系统服务实现,不需要前端配合,理论上原生兼容各类网页,但使用了hook方案,安卓系统兼容性相对较差。
132.在本公开另一种可能的实现方式中,在实现了触控事件的跨进程传输的基础上,对于输入事件的指令跨进程传输,可以综合考虑图3所示的jsb方案和图6所示的hook实现方案,例如,可以尝试优先使用图6所示的hook方案实现输入事件的指令跨进程传输,在hook方案失败的情况下,可以采用图3所示的jsb方案,从而兼顾了方案的通用性和网页兼容性,通过jsb方案作为兜底保证在hook系统失败时功能也不受影响,在验证hook方案稳定后逐步采用hook方案。
133.下面对本公开的一种可能的应用场景进行说明,该目标应用软件包括游戏软件,该预设浮窗应用包括所述游戏软件上的直播悬浮窗,基于本公开提供的方法,可以接收用户对所述直播悬浮窗的目标触控操作;获取所述目标触控操作对应的目标触控对象(如目标touchevent对象),所述目标触控对象包括所述目标触控操作的触控参数;根据所述触控
参数通过所述游戏软件所在的主进程获取目标触控指令;通过预设aidl机制将所述目标触控指令从所述主进程跨进程传输至所述子进程;在所述子进程对所述目标触控指令进行指令重放后,将指令执行结果渲染至所述主进程,以便在所述主进程展示所述直播悬浮窗的画面。
134.示例地,用户点击了游戏软件界面上的直播悬浮窗上的“播放”按钮后,终端可以获取到该目标触控操作,终端上的系统服务(指系统进程中的服务)可以获取包括该目标触控操作的触控参数的目标touchevent对象,然后调用位于主进程的画布视窗surfaceview的ontouchevent方法,并将该目标touchevent对象传入该ontouchevent方法后主进程获取到目标触控指令,主进程通过预设aidl机制将所述目标触控指令传输至子进程,以便在子进程对所述目标触控指令进行指令重放后,将直播画面渲染至主进程的画布视窗surfaceview进行画面显示,这样可以将游戏逻辑和直播悬浮窗上的产品直播逻辑运行在两个进程上。
135.假设该目标应用软件为手机游戏,该预设浮窗应用为手机游戏界面上的浮窗赛事直播,用户在手机游戏端内通过浮窗的方式观看赛事直播的过程中,若接收到游戏软件内产生的请求消息(如好友添加请求或者聊天消息),可以在该浮窗上提示用户,玩家响应提示后,可以在浮窗上展示对应页面,然后浮窗可以接收玩家输入,并将玩家在浮窗上的输入指令通过后台的webview透传至游戏进程(即主进程),使得玩家无需回到游戏界面进行提示消息的响应,提高了玩家的便利性和用户体验。
136.图8是根据一示例性实施例示出的一种指令传输装置的框图,如图8所示,所述装置包括:
137.接收模块801,用于接收用户对预设浮窗应用的触控操作,所述预设浮窗应用为终端的目标应用软件上的浮窗应用,所述终端包括主进程和子进程,所述主进程为运行所述目标应用软件的进程,所述子进程为所述预设浮窗应用对应的进程;
138.获取模块802,用于获取所述触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的所述触控操作对应的触控事件;
139.指令传输模块803,用于根据所述跨进程传输对象通过所述主进程获取触控指令,并通过所述主进程将所述触控指令传输至所述子进程;
140.渲染模块804,用于在所述子进程对所述触控指令进行指令重放后,将指令执行结果渲染至所述主进程。
141.可选地,所述主进程包括画布视窗,所述画布视窗用于展示所述预设浮窗应用的画面,所述跨进程传输对象包括第一预设对象,所述第一预设对象用于记录当前的触控操作对应的触控参数,所述指令传输模块803,用于通过调用所述画布视窗的预设指令获取方法,并将所述第一预设对象传入所述预设指令获取方法后获取所述触控指令。
142.可选地,所述子进程包括主进程指令接收组件以及网页视窗,所述指令传输模块803,用于通过预设android接口定义语言aidl机制将所述触控指令从所述画布视窗跨进程传输至所述主进程指令接收组件;通过所述主进程指令接收组件将所述触控指令传输至所述网页视窗。
143.可选地,所述渲染模块804,用于通过所述网页视窗加载所述预设浮窗应用对应的h5页面;通过所述h5页面对所述触控指令进行指令重放。
144.可选地,所述子进程包括与所述网页视窗进行数据传输的前端h5页面,所述指令传输模块803,用于在所述触控指令为对所述预设浮窗应用的第一输入框的点击指令的情况下,若所述前端h5页面根据所述点击指令获取到所述第一输入框的焦点,通过jsbridge通信机制将所述点击指令传输至所述网页视窗;所述网页视窗通过预设aidl机制将所述点击指令跨进程传输至所述主进程;所述主进程接收到所述点击指令后,在所述主进程上添加第二输入框;通过所述第二输入框打开预设输入法。
145.可选地,图9是根据图8所示实施例示出的一种指令传输装置的框图,如图9所示,该装置还包括:
146.输入文本显示模块805,用于通过所述第二输入框接收目标输入文本;通过所述预设aidl机制将所述目标输入文本传输至所述网页视窗;所述网页视窗通过所述jsbridge通信机制将所述目标输入文本添加至所述前端h5页面的页面输入框后,通过执行所述预设渲染方法将所述目标输入文本渲染至所述第一输入框。
147.可选地,图10是根据图8所示实施例示出的一种指令传输的装置的框图,如图10所示,该装置还包括:内容同步模块806,用于在所述触控指令用于表征对所述预设浮窗应用的消息发布按钮的触发操作的情况下,在对所述触控指令进行指令重放后,若所述前端h5页面的页面输入框内的显示内容发生变化,通过所述jsbridge通信机制将所述页面输入框内变化后的目标显示内容传输至所述网页视窗;所述网页视窗通过预设aidl机制将所述目标显示内容跨进程传输至所述第二输入框,以便将所述第二输入框内当前显示的内容修改为所述目标显示内容。
148.可选地,所述终端还包括系统进程,所述系统进程包括接收触控事件的系统服务,所述主进程上添加有用于打开预设输入法的第二输入框,所述主进程包括预先设置的输入事件管理对象,所述子进程包括所述输入事件管理对象以及hook代理对象,所述hook代理对象为所述输入事件管理对象中android接口定义语言aidl接口的代理对象,图11是根据图8所示实施例示出的一种指令传输的装置的框图,如图11所示,该装置还包括:
149.输入控制模块807,用于在所述触控指令为对所述预设浮窗应用的第一输入框的点击指令的情况下,所述hook代理对象通过所述预设aidl机制向所述主进程传输第一方法调用指令,所述第一方法调用指令用于指示所述主进程调用所述系统服务的预设开启方法,所述预设开启方法用于打开预设输入法;所述主进程在接收到所述第一方法调用指令后,通过所述第二输入框打开所述预设输入法。
150.可选地,所述输入控制模块807,用于在所述触控指令为对所述预设浮窗应用的第一输入框的点击指令的情况下,通过所述子进程的输入事件管理对象创建第二预设对象,所述第二预设对象用于接收输入法指令;
151.通过所述网页视窗将对象创建指令跨进程传递至所述主进程的第二输入框,所述对象创建指令用于指示所述第二输入框创建所述第二预设对象;
152.所述第二输入框在接收到所述对象创建指令后,通过所述主进程的输入事件管理对象创建所述第二预设对象。
153.可选地,所述输入控制模块807,用于所述网页视窗和所述第二输入框均创建所述第二预设对象,并且通过所述第二输入框打开所述预设输入法后,在接收到用户触发的输入指令的情况下,所述系统服务通过调用所述第二输入框的所述第二预设对象将所述输入
指令跨进程传输至所述主进程的第二输入框,所述输入指令为根据用户使用所述预设输入法在所述第一输入框上的输入操作生成的指令;
154.所述第二输入框将所述输入指令跨进程传输至所述网页视窗的第二预设对象;
155.所述网页视窗对所述输入指令进行指令重放后,通过执行预设渲染方法将指令执行结果渲染至所述主进程。
156.可选地,所述输入控制模块807,用于在所述触控指令用于表征对所述预设浮窗应用的消息发布按钮的触发操作的情况下,在对所述触控指令进行指令重放后,所述hook代理对象通过所述预设aidl机制向所述主进程传输第二方法调用指令,所述第二方法调用指令用于指示所述主进程调用所述系统服务的预设关闭方法,所述预设关闭方法用于关闭预设输入法;
157.所述主进程在接收到所述第二方法调用指令后,通过所述第二输入框关闭所述预设输入法。
158.可选地,所述目标应用软件包括游戏软件,所述预设浮窗应用包括所述游戏软件上的直播悬浮窗,所述指令传输模块803,用于接收用户对所述直播悬浮窗的目标触控操作;获取所述目标触控操作对应的目标触控对象,所述目标触控对象包括所述目标触控操作的触控参数;根据所述触控参数通过所述游戏软件所在的主进程获取目标触控指令;通过预设aidl机制将所述目标触控指令从所述主进程跨进程传输至所述子进程;在所述子进程对所述目标触控指令进行指令重放后,将指令执行结果渲染至所述主进程,以便在所述主进程展示所述直播悬浮窗的画面。
159.下面参考图12,其示出了适于用来实现本公开实施例的电子设备1200的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图12示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
160.如图12所示,电子设备1200可以包括处理装置(例如中央处理器、图形处理器等)1201,其可以根据存储在只读存储器(rom)1202中的程序或者从存储装置1208加载到随机访问存储器(ram)1203中的程序而执行各种适当的动作和处理。在ram 1203中,还存储有电子设备1200操作所需的各种程序和数据。处理装置1201、rom 1202以及ram 1203通过总线1204彼此相连。输入/输出(i/o)接口1205也连接至总线1204。
161.通常,以下装置可以连接至i/o接口1205:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置1206;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置1207;包括例如磁带、硬盘等的存储装置1208;以及通信装置1209。通信装置1209可以允许电子设备1200与其他设备进行无线或有线通信以交换数据。虽然图12示出了具有各种装置的电子设备1200,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
162.特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置1209从网络上被下载和安装,或者从存储
装置1208被安装,或者从rom 1202被安装。在该计算机程序被处理装置1201执行时,执行本公开实施例的方法中限定的上述功能。
163.需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。
164.在一些实施方式中,客户端可以利用诸如http(hypertext transfer protocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“lan”),广域网(“wan”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
165.上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
166.上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收用户对预设浮窗应用的触控操作,所述预设浮窗应用为终端的目标应用软件上的浮窗应用,所述终端包括主进程和子进程,所述主进程为运行所述目标应用软件的进程,所述子进程为所述预设浮窗应用对应的进程;获取所述触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的所述触控操作对应的触控事件;根据所述跨进程传输对象通过所述主进程获取触控指令,并通过所述主进程将所述触控指令传输至所述子进程;在所述子进程对所述触控指令进行指令重放后,将指令执行结果渲染至所述主进程。
167.可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言——诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)——连接到用户计算机,或者,可以连接到外部计算机(例如
利用因特网服务提供商来通过因特网连接)。
168.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
169.描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取模块还可以被描述为“获取跨进程传输对象的模块”。
170.本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。
171.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
172.根据本公开的一个或多个实施例,示例1提供了一种指令传输方法,所述方法包括:
173.接收用户对预设浮窗应用的触控操作,所述预设浮窗应用为终端的目标应用软件上的浮窗应用,所述终端包括主进程和子进程,所述主进程为运行所述目标应用软件的进程,所述子进程为所述预设浮窗应用对应的进程;
174.获取所述触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的所述触控操作对应的触控事件;
175.根据所述跨进程传输对象通过所述主进程获取触控指令,并通过所述主进程将所述触控指令传输至所述子进程;
176.在所述子进程对所述触控指令进行指令重放后,将指令执行结果渲染至所述主进程。
177.根据本公开的一个或多个实施例,示例2提供了示例1的方法,所述主进程包括画布视窗,所述画布视窗用于展示所述预设浮窗应用的画面,所述跨进程传输对象包括第一预设对象,所述第一预设对象用于记录当前的触控操作对应的触控参数,所述根据所述跨
进程传输对象通过所述主进程获取触控指令包括:
178.通过调用所述画布视窗的预设指令获取方法,并将所述第一预设对象传入所述预设指令获取方法后获取所述触控指令。
179.根据本公开的一个或多个实施例,示例3提供了示例2的方法,所述子进程包括主进程指令接收组件以及网页视窗,所述主进程将所述触控指令传输至所述子进程包括:
180.通过预设android接口定义语言aidl机制将所述触控指令从所述画布视窗跨进程传输至所述主进程指令接收组件;
181.通过所述主进程指令接收组件将所述触控指令传输至所述网页视窗。
182.根据本公开的一个或多个实施例,示例4提供了示例3的方法,所述子进程对所述触控指令进行指令重放包括:
183.通过所述网页视窗加载所述预设浮窗应用对应的h5页面;
184.通过所述h5页面对所述触控指令进行指令重放。
185.根据本公开的一个或多个实施例,示例5提供了示例3的方法,所述子进程包括与所述网页视窗进行数据传输的前端h5页面,所述方法还包括:
186.在所述触控指令为对所述预设浮窗应用的第一输入框的点击指令的情况下,若所述前端h5页面根据所述点击指令获取到所述第一输入框的焦点,通过jsbridge通信机制将所述点击指令传输至所述网页视窗;
187.所述网页视窗通过预设aidl机制将所述点击指令跨进程传输至所述主进程;
188.所述主进程接收到所述点击指令后,在所述主进程上添加第二输入框;
189.通过所述第二输入框打开预设输入法。
190.根据本公开的一个或多个实施例,示例6提供了示例5的方法,所述方法还包括:
191.通过所述第二输入框接收目标输入文本;
192.通过所述预设aidl机制将所述目标输入文本传输至所述网页视窗;
193.所述网页视窗通过所述jsbridge通信机制将所述目标输入文本添加至所述前端h5页面的页面输入框后,通过执行所述预设渲染方法将所述目标输入文本渲染至所述第一输入框。
194.根据本公开的一个或多个实施例,示例7提供了示例5的方法,所述方法还包括:
195.在所述触控指令用于表征对所述预设浮窗应用的消息发布按钮的触发操作的情况下,在对所述触控指令进行指令重放后,若所述前端h5页面的页面输入框内的显示内容发生变化,通过所述jsbridge通信机制将所述页面输入框内变化后的目标显示内容传输至所述网页视窗;
196.所述网页视窗通过预设aidl机制将所述目标显示内容跨进程传输至所述第二输入框,以便将所述第二输入框内当前显示的内容修改为所述目标显示内容。
197.根据本公开的一个或多个实施例,示例8提供了示例3的方法,所述终端还包括系统进程,所述系统进程包括接收触控事件的系统服务,所述主进程上添加有用于打开预设输入法的第二输入框,所述主进程包括预先设置的输入事件管理对象,所述子进程包括所述输入事件管理对象以及hook代理对象,所述hook代理对象为所述输入事件管理对象中android接口定义语言aidl接口的代理对象,在所述通过所述主进程指令接收组件将所述触控指令传输至所述网页视窗后,所述方法还包括:
198.在所述触控指令为对所述预设浮窗应用的第一输入框的点击指令的情况下,所述hook代理对象通过所述预设aidl机制向所述主进程传输第一方法调用指令,所述第一方法调用指令用于指示所述主进程调用所述系统服务的预设开启方法,所述预设开启方法用于打开预设输入法;
199.所述主进程在接收到所述第一方法调用指令后,通过所述第二输入框打开所述预设输入法。
200.根据本公开的一个或多个实施例,示例9提供了示例8的方法,所述方法还包括:
201.在所述触控指令为对所述预设浮窗应用的第一输入框的点击指令的情况下,通过所述子进程的输入事件管理对象创建第二预设对象,所述第二预设对象用于接收输入法指令;
202.通过所述网页视窗将对象创建指令跨进程传递至所述主进程的第二输入框,所述对象创建指令用于指示所述第二输入框创建所述第二预设对象;
203.所述第二输入框在接收到所述对象创建指令后,通过所述主进程的输入事件管理对象创建所述第二预设对象。
204.根据本公开的一个或多个实施例,示例10提供了示例9的方法,所述网页视窗和所述第二输入框均创建所述第二预设对象,并且通过所述第二输入框打开所述预设输入法后,所述方法还包括:
205.在接收到用户触发的输入指令的情况下,所述系统服务通过调用所述第二输入框的所述第二预设对象将所述输入指令跨进程传输至所述主进程的第二输入框,所述输入指令为根据用户使用所述预设输入法在所述第一输入框上的输入操作生成的指令;
206.所述第二输入框将所述输入指令跨进程传输至所述网页视窗的第二预设对象;
207.所述网页视窗对所述输入指令进行指令重放后,通过执行预设渲染方法将指令执行结果渲染至所述主进程。
208.根据本公开的一个或多个实施例,示例11提供了示例8的方法,所述方法还包括:
209.在所述触控指令用于表征对所述预设浮窗应用的消息发布按钮的触发操作的情况下,在对所述触控指令进行指令重放后,所述hook代理对象通过所述预设aidl机制向所述主进程传输第二方法调用指令,所述第二方法调用指令用于指示所述主进程调用所述系统服务的预设关闭方法,所述预设关闭方法用于关闭预设输入法;
210.所述主进程在接收到所述第二方法调用指令后,通过所述第二输入框关闭所述预设输入法。
211.根据本公开的一个或多个实施例,示例12提供了示例1-11任一项所述的方法,所述目标应用软件包括游戏软件,所述预设浮窗应用包括所述游戏软件上的直播悬浮窗,所述方法包括:
212.接收用户对所述直播悬浮窗的目标触控操作;
213.获取所述目标触控操作对应的目标触控对象,所述目标触控对象包括所述目标触控操作的触控参数;
214.根据所述触控参数通过所述游戏软件所在的主进程获取目标触控指令;
215.通过预设aidl机制将所述目标触控指令从所述主进程跨进程传输至所述子进程;
216.在所述子进程对所述目标触控指令进行指令重放后,将指令执行结果渲染至所述
主进程,以便在所述主进程展示所述直播悬浮窗的画面。
217.根据本公开的一个或多个实施例,示例13提供了一种指令传输装置,所述装置包括:
218.接收模块,用于接收用户对预设浮窗应用的触控操作,所述预设浮窗应用为终端的目标应用软件上的浮窗应用,所述终端包括主进程和子进程,所述主进程为运行所述目标应用软件的进程,所述子进程为所述预设浮窗应用对应的进程;
219.获取模块,用于获取所述触控操作对应的跨进程传输对象,所述跨进程传输对象用于表征当前的触控操作对应的触控事件;
220.指令传输模块,用于根据所述跨进程传输对象通过所述主进程获取触控指令,并通过所述主进程将所述触控指令传输至所述子进程;
221.渲染模块,用于在所述子进程对所述触控指令进行指令重放后,通过执行预设渲染方法将指令执行结果渲染至所述主进程。
222.根据本公开的一个或多个实施例,示例14提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现示例1-12中任一项所述方法的步骤。
223.根据本公开的一个或多个实施例,示例15提供了一种电子设备,包括:
224.存储装置,其上存储有计算机程序;
225.处理装置,用于执行所述存储装置中的所述计算机程序,以实现示例1-12中任一项所述方法的步骤。
226.以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
227.此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
228.尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1