CN116932113A - 一种应用共享方法、装置、设备及存储介质 - Google Patents
一种应用共享方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116932113A CN116932113A CN202310894644.9A CN202310894644A CN116932113A CN 116932113 A CN116932113 A CN 116932113A CN 202310894644 A CN202310894644 A CN 202310894644A CN 116932113 A CN116932113 A CN 116932113A
- Authority
- CN
- China
- Prior art keywords
- application
- screen
- shared
- sharing
- display
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 104
- 238000004590 computer program Methods 0.000 claims description 20
- 230000002194 synthesizing effect Effects 0.000 claims description 12
- 230000015572 biosynthetic process Effects 0.000 claims description 6
- 238000003786 synthesis reaction Methods 0.000 claims description 6
- 230000001960 triggered effect Effects 0.000 claims description 4
- 230000000903 blocking effect Effects 0.000 abstract description 6
- 230000008569 process Effects 0.000 description 26
- 230000006870 function Effects 0.000 description 19
- 238000012545 processing Methods 0.000 description 7
- 230000004044 response Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 206010044565 Tremor Diseases 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
- G06F9/452—Remote windowing, e.g. X-Window System, desktop virtualisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本申请适用于设备智能控制技术领域,提供一种应用共享方法、装置、设备及存储介质,其中方法包括:在分享屏幕中创建虚拟屏幕,所述虚拟屏幕用于显示待共享应用的显示画面;基于所述虚拟屏幕,获取与所述待共享应用的显示画面对应的画面图层堆栈;发送应用共享指令至第二设备,所述应用共享指令中携带有所述画面图层堆栈,所述应用共享指令指示所述第二设备基于所述画面图层堆栈显示所述待共享应用的显示画面。该方案能够降低性能消耗,改善丢帧花屏卡顿的问题。
Description
技术领域
本申请属于设备智能控制技术领域,尤其涉及一种应用共享方法、装置、设备及存储介质。
背景技术
随着终端设备的发展,为满足更多场景下的用户需求,一些终端例如手机或者车机中配置应用共享功能。应用共享功能对应的是设备间对自身屏幕中显示的应用内容进行共享的方案。
一些应用共享中,采用创建虚拟屏幕的方式,把当前需要共享的应用显示到虚拟屏幕上。其中虚拟屏幕是指在不影响主屏幕的情况下,用软件虚拟一个桌面。随后通过录屏把虚拟屏幕上的显示内容以视频流的形式取出,将取出的视频流数据编码后输出到目标屏幕上进行解码显示,从而在不同屏幕中给用户呈现出内容一致的应用显示画面,实现应用共享。
该过程,通过录屏将屏幕中显示内容以视频流的形式取出,结合数据的编解码传输实现应用共享,性能消耗高,且容易导致丢帧花屏卡顿等问题。
发明内容
本申请实施例提供了一种应用共享方法、装置、设备及存储介质,以解决现有技术中通过录屏将屏幕中显示内容以视频流的形式取出,结合数据的编解码传输实现应用共享,性能消耗高,且容易导致丢帧花屏卡顿的问题。
本申请实施例的第一方面提供了一种应用共享方法,应用于第一设备,所述方法包括:
在分享屏幕中创建虚拟屏幕,所述虚拟屏幕用于显示待共享应用的显示画面;
基于所述虚拟屏幕,获取与所述待共享应用的显示画面对应的画面图层堆栈;
发送应用共享指令至第二设备,所述应用共享指令中携带有所述画面图层堆栈,所述应用共享指令指示所述第二设备基于所述画面图层堆栈显示所述待共享应用的显示画面。
本申请实施例的第二方面提供了一种应用共享方法,应用于第二设备,所述方法包括:
接收第一设备发送的应用共享指令;所述应用共享指令中携带有与待共享应用的显示画面对应的画面图层堆栈;所述画面图层堆栈为基于所述第一设备在分享屏幕中创建的虚拟屏幕获取得到,所述虚拟屏幕用于显示所述待共享应用的显示画面;
响应所述应用共享指令,对所述画面图层堆栈进行合成,得到所述待共享应用的显示画面并显示所述待共享应用的显示画面。
本申请实施例的第三方面提供了一种应用共享装置,包括通信连接至第二设备的第一设备和/或包括通信连接至所述第一设备的所述第二设备;所述第一设备用于执行如第一方面所述的方法,所述第二设备用于执行如第二方面所述的方法。
本申请实施例的第四方面提供了一种车载设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述方法的步骤。
本申请实施例的第五方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面或第二方面所述方法的步骤。
本申请的第六方面提供了一种计算机程序产品,当所述计算机程序产品在车载设备上运行时,使得所述车载设备执行上述第一方面或第二方面所述方法的步骤。
由上可见,本申请采用基于虚拟屏幕,获取待共享应用的画面图层堆栈,用共享画面图层堆栈的方式将一个设备中待共享应用对应的显示画面共享至其他设备,使其他设备能够基于与该应用对应的画面图层堆栈生成待共享应用的显示画面并显示,实现某些应用在不同设备间的应用共享,降低性能消耗,且使其他设备能够基于待共享应用的画面图层堆栈自行生成对应的显示画面并显示,改善了丢帧花屏卡顿的问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种应用共享方法的流程图一;
图2是本申请实施例提供的一种应用共享方法的流程图二;
图3是本申请实施例提供的一种应用共享装置的结构图;
图4是本申请实施例提供的一种车载设备的结构图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
具体实现中,本申请实施例中描述的车载设备包括但不限于诸如具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的车载电话、车载计算机之类的车载设备。
在接下来的讨论中,描述了包括显示器和触摸敏感表面的车载设备。然而,应当理解的是,车载设备可以包括诸如物理键盘、鼠标和/或控制杆的一个或多个其它物理用户接口设备。
车载设备支持各种应用程序,例如以下中的一个或多个:绘图应用程序、演示应用程序、文字处理应用程序、网站创建应用程序、盘刻录应用程序、电子表格应用程序、游戏应用程序、电话应用程序、视频会议应用程序、电子邮件应用程序、即时消息收发应用程序、锻炼支持应用程序、照片管理应用程序、数码相机应用程序、数字摄影机应用程序、web浏览应用程序、数字音乐播放器应用程序和/或数字视频播放器应用程序。
可以在车载设备上执行的各种应用程序可以使用诸如触摸敏感表面的至少一个公共物理用户接口设备。可以在应用程序之间和/或相应应用程序内调整和/或改变触摸敏感表面的一个或多个功能以及车载设备上显示的相应信息。这样,车载设备的公共物理架构(例如,触摸敏感表面)可以支持具有对用户而言直观且透明的用户界面的各种应用程序。
应理解,本实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在一些设备中,例如手机首先推出应用共享功能,它可将应用共享给另外一台手机,两部手机同步看视频追剧、刷娱乐短视频,同步观战游戏,还可同步相机等,实现某些应用在两个设备间的应用共享。
该共享方式,是使用两个设备上的同一个APP来实现,比如A手机上的抖音和B手机上的抖音,通过同一个APP,分享端设备中的APP传输数据,接收端设备中的APP接收数据,实现显示数据的共享,需要应用本身支持分享才能使用。
或者,例如在车机一个屏幕上乘客看视频、玩游戏,其他乘客都想看,一起玩,则利用座舱多屏,将该屏幕上的应用显示内容传输给其他屏幕设备进行显示,他看的我们一起看,他玩的我们一起玩,实现某些应用在不同显示设备间的应用共享。
该过程为车机座舱多屏间的应用共享,是使用应用共享的方式,会把中控台主屏幕上的状态栏,Dock栏或者各种弹框也共享出来,实现的不是针对某些具体应用的应用共享,实际上没有实现真正的只共享应用。且同时也会导致用户在接收设备中操作那些只能中控台主屏幕操作的按钮,给车机带来安全隐患。
因此,本申请方法中,在创建虚拟屏,把当前需要共享应用的显示数据单独挪移到该虚拟屏上,针对某些应用的应用共享实施过程中,改变背景技术中描述的通过录屏把虚拟屏上的内容以视频流的形式取出,并结合数据的编解码传输实现应用共享的方式,采用基于虚拟屏幕,获取待共享应用的画面图层堆栈,用共享画面图层堆栈的方式将一个设备中待共享应用对应的显示画面共享至其他设备,使其他设备能够基于与该应用对应的画面图层堆栈生成待共享应用的显示画面并显示,实现某些应用在不同设备间的应用共享。
为了说明本申请所述的技术方案,下面通过具体实施例来进行说明。
参见图1,图1是本申请实施例提供的一种应用共享方法的流程图一。如图1所示,一种应用共享方法,应用于第一设备,该方法包括以下步骤:
步骤101,在分享屏幕中创建虚拟屏幕。
该虚拟屏幕用于显示待共享应用的显示画面。
分享屏幕为第一设备中的显示屏幕。
虚拟屏幕为在第一设备中用软件虚拟的一个桌面屏幕。具体地,以安卓(Android)为例,Android支持多个屏幕:主显、外显和虚显(VirtualDisplay)。本申请实施例中的虚拟屏幕即为该虚显,其作用就是抓取分享屏幕上显示的内容。
在具体实现中,利用Android中的createVirtualDisplay方法在分享屏幕上创建一个VirtualDisplay(虚拟显示)。
在一个示例中,步骤101在分享屏幕中创建虚拟屏幕,包括:
在分享屏幕中创建分享窗口;
在分享窗口中创建画布,其中,所述画布被创建时,所述虚拟屏幕被创建于所述画布中。
可选地,分享窗口中包含大小与分享窗口相同的画布视图控件。
其中,画布视图控件在自身界面被创建时调用设定方法创建一个虚拟屏幕。
在一个具体实现过程中,例如识别到用户想要分享当前屏幕(分享屏幕)上正在显示的应用,则先在分享屏幕上创建一块SharedWindow(分享窗口),SharedWindow中主要是包含一个ActivityView控件。这里,可选地,SharedWindow(分享窗口)可以和分享屏幕的应用区域大小相同。
其中,ActivityView控件中封装了一个SurfaceView,在SurfaceView的surfaceCreated(界面被创建)时通过DisplayManagerService的createVirtualDisplay方法创建一个VirtualDisplay(虚拟屏幕)。
其中,该实现过程中,使用ActivityView封装了InputForwarder,可以直接把对物理屏幕上的点击和触摸事件直接转移给了对应的虚拟屏,确保第一设备中用户在ActivityView里就可以正常对虚拟屏幕内容使用屏幕操作,不影响第一设备中显示屏的正常功能实现。
步骤102,基于虚拟屏幕,获取与待共享应用的显示画面对应的画面图层堆栈。
画面图层堆栈包含多个显示画面图层。
在每一个虚拟屏幕被创建时,可以为该虚拟屏幕分配对应的屏幕编号及画面图层堆栈地址,待共享应用的显示画面对应的多个显示画面图层则需要与该屏幕编号及画面图层堆栈地址之间建立起关联关系,待共享应用的显示画面对应的多个显示画面图层也需要依照与虚拟屏幕对应的画面图层堆栈地址在对应的存储区域进行存储。
因此,可以基于虚拟屏幕,结合前述关联关系,从对应的存储区域中获取与当前待共享应用的显示画面对应的画面图层堆栈。
在一个具体实现过程中,借助于虚拟屏幕创建方法createVirtualDisplay创建一个VirtualDisplay,并且分配默认的DisplayId(屏幕编号,分配的原则可选为在现有最大DisplayId基础上+1)和LayerStack(画面图层堆栈地址)。
其中,画面图层堆栈是存储显示画面图层(layer)的容器,每个显示屏幕只会有一个画面图层堆栈来存储他要显示的layer。
在一个示例中,该步骤102基于虚拟屏幕,获取与待共享应用的显示画面对应的画面图层堆栈,包括:
基于所述虚拟屏幕,确定所述虚拟屏幕所在的所述分享窗口对应的缓存区;从缓存区中提取所述显示画面图层,得到与所述待共享应用的显示画面对应的所述画面图层堆栈。
其中,缓存区中存储有与待共享应用对应的多个显示画面图层。
这里,由于虚拟屏幕被创建并显示于分享窗口中,虚拟屏幕被分配的画面图层堆栈地址,也即为分享窗口的画面图层堆栈地址,与该画面图层堆栈地址对应的缓存区也即为分享窗口对应的缓存区。
借助于虚拟屏幕与其所在的分享窗口之间的共存关系,找到与两者共同关联的缓存区,进而提取其中存储的多个显示画面图层,得到与待共享应用的显示画面对应的画面图层堆栈,提升实际应用过程的可实施性。
在所述在分享屏幕中创建虚拟屏幕之后,还包括:
从所述分享屏幕所显示的至少一个应用中确定待共享应用,并确定所述待共享应用对应的显示画面图层;
将所述显示画面图层存入所述分享窗口对应的缓存区中;
对所述缓存区中的存储的所述显示画面图层进行合成,将合成后的显示画面在所述虚拟屏幕中进行输出显示。
其中,需要确定分析屏幕中待显示的至少一个应用及至少一个应用中待共享的目标应用,该待共享的目标应用可以是由用户选取确定。
在对缓存区中的存储的显示画面图层进行合成的操作可以发生在对分享屏幕中的所有画面图层进行合成的过程中,实现对分享屏幕中不同显示屏幕所对应显示内容的一并处理。
其中,在对分享屏幕中的所有画面图层进行合成的过程中,需要对分享窗口所对应缓存区中的存储的显示画面图层进行单独合成,以确保待共享应用的显示画面被单独输出显示在分享窗口中的虚拟屏幕中。
在一个具体实现过程中,基于SurfaceFlinger在对分享屏幕中所有的显示画面图层做合成的时候,会对该分析屏幕中创建的虚拟屏幕所对应的显示画面图层做一次独立的合成,将合成结果传输至分享窗口中的虚拟屏幕中进行显示。
其中,SurfaceFlinger作为Android在native层比较重要的一个系统服务,主要作用是合并所有的显示图层,将其绘制输出到显示设备当中。
其中,将合成结果传输至分享窗口中的虚拟屏幕中进行显示,可以是将合成完的结果渲染到SharedWindow中包含的ActivityView空间传递过来的缓冲区(Buffer)。而ActivityView在拿到装有合成结果的Buffer以后,就可以对Buffer进行进一步的处理比如直接去显示,从而达到将分享屏幕上的内容镜像到SharedWindow上的目的,实现在虚拟屏幕中显示待共享应用的显示画面。
为了确保分享屏幕中系统操作或系统功能实现所需的界面内容不被虚拟屏幕所在层覆盖,在SharedWindow上的内容镜像成功后,获取到分享屏幕上最顶端的ActivityStack和创建的VirtualDisplay的DisplayId。接着使用ActivityManager的moveStackToDisplay(ActivityStack,DisplayId)方法把分享屏幕上的ActivityStack移动到创建的VirtualDisplay上,实现将分享屏幕中的任务项堆栈移动虚拟显示屏上正常显示,该任务项堆栈中例如包含任务栏、悬浮图标等内容。
在一个实施例中,在设置显示虚拟屏幕(VirtualDisplay)的分享窗口(SharedWindow)和分享屏幕的大小一致的情况下,可以确保用户基本对这次的应用移动无感。
步骤103,发送应用共享指令至第二设备,该应用共享指令中携带有所述画面图层堆栈。
这里,应用共享指令指示第二设备基于画面图层堆栈显示所述待共享应用的显示画面。
通过向第二设备发送携带有画面图层堆栈的应用共享指令,来实施待共享应用的显示画面的传输共享。
本申请上述实施例,采用基于虚拟屏幕,获取待共享应用的画面图层堆栈,用共享画面图层堆栈的方式将一个设备中待共享应用对应的显示画面共享至其他设备,使其他设备能够基于与该应用对应的画面图层堆栈生成待共享应用的显示画面并显示,实现某些应用在不同设备间的应用共享,降低性能消耗,且使其他设备能够基于待共享应用的画面图层堆栈自行生成对应的显示画面并显示,改善了丢帧花屏卡顿的问题。
进一步地,本申请实施例中,在屏幕应用共享基础上,还提出了应用反控的实施情形。
具体地,在步骤103发送应用共享指令至第二设备之后,还包括:
获取第二设备输入的应用反控指令;响应应用反控指令,执行应用操作事件,并基于应用操作事件的执行结果对所述缓存区中的所述显示画面图层进行更新,对缓存区中更新后的显示画面图层进行合成,将合成后的显示画面在虚拟屏幕中进行输出显示。
其中,应用反控指令携带有应用操作事件,该应用操作事件为用户基于第二设备中显示的待共享应用的显示画面进行触发。
在实际应用中,在第二设备显示待共享应用的显示画面后,如果用户在第二设备的显示屏中对待共享应用的显示画面区域中做了操作动作,那么第二设备可以基于该操作定位其在待共享应用的显示画面区域中对应于待共享应用中的哪个功能项,基于确定出的目标功能项及用户操作动作,确定出与之对应的应用操作事件,输出应用反控指令至第一设备,以将该应用操作事件传回第一设备使其进行响应处理。
应用操作事件例如为应用画面切换事件、应用播放暂停事件等。
在一个具体实现过程中,第二设备的接收屏幕上可以利用SurfaceControl.createDisplay方法创建一个显示屏幕,该显示屏幕上包含SurfaceView控件,基于该SurfaceView控件,采用createInputForwarder(DisplayId)方法,传入分享屏幕中VirtualDisplay的DisplayId,将接收屏幕上SurfaceView的输入事件(即应用操作事件)转发到分享屏幕中的VirtualDisplay中,从而实现了接收屏幕对分享屏幕的反向控制。
该实现过程中,反控方式充分利用Android原生的InputForwarder方法,实现简单,代码简洁。
该过程,在实现应用共享基础上,提出了应用反控的实施情形,确保应用共享中的功能完善性,使被共享设备中人员的应用操控能够被响应,且确保共享设备中其他未分享的应用不被其他人员随意操控,提升安全性。
本申请实施例中还提供了应用共享方法的不同实施方式。
参见图2,图2是本申请实施例提供的一种应用共享方法的流程图二。如图2所示,一种应用共享方法,应用于第二设备,该方法包括以下步骤:
步骤201,接收第一设备发送的应用共享指令。
其中,应用共享指令中携带有与待共享应用的显示画面对应的画面图层堆栈。画面图层堆栈为基于所述第一设备在分享屏幕中创建的虚拟屏幕获取得到,该虚拟屏幕用于显示待共享应用的显示画面。
这里,第一设备作为共享设备,第二设备作为被共享设备。
其中第一设备侧如何生成应用共享指令可以参照前述实施例中的一种应用共享方法,此处不再赘述。
步骤202,响应所述应用共享指令,对所述画面图层堆栈进行合成,得到所述待共享应用的显示画面并显示所述待共享应用的显示画面。
第二设备在接收到应用共享指令后,即可基于与待共享应用对应的画面图层堆栈生成待共享应用的显示画面并显示,使第二设备中在显示待共享应用的显示画面时,该画面是基于存储在第二设备中的画面图层堆栈进行画面自行合并生成,无需像录屏得到的视频流那样跨系统操作,降低性能消耗,改善应用共享过程中丢帧花屏卡顿的问题。
在一个具体应用过程中,当在第一设备中利用createVirtualDisplay在分享屏幕上创建一个VirtualDisplay,并把分享屏幕上准备分享的应用移动到VirtualDisplay上之后,与之对应地,在第二设备中的接收屏幕上利用SurfaceControl.createDisplay方法创建一个显示屏幕(Display),同时拿到第一设备中分享屏幕上创建的VirtualDisplay对应的待共享应用的LayerStack,然后通过设置方法SurfaceControl.setDisplayLayerStack(Display LayerStack)把分享屏幕的VirtualDisplay上的画面同步渲染到第二设备的Display上,实现应用的应用共享。
在一个示例中,步骤202,显示待共享应用的显示画面,包括:
在接收屏幕中创建接收窗口;
在所述接收窗口中创建画布,将所述待共享应用的显示画面在所述画布中进行显示。
其中,可选地,在接收屏幕中创建接收窗口之前,可以先通过监听onForegroundActivitiesChanged方法来确定待共享应用是否成功完成从分享屏幕到VirtualDisplay的移动。在确定为是时,则在接收屏幕上也创建一块ReceivedWindow,该ReceivedWindow中主要是包含一个SurfaceView控件。SurfaceView控件会在自己surfaceCreated(界面被创建)时通过SurfaceControl.createDisplay方法创建一个Display,在将待共享应用的显示画面在画布中进行显示时,可以是将待共享应用的显示画面显示于画布中的Display中。
此处选择使用SurfaceView区别于第一设备中采用ActivityView的原因是:接收屏幕中接收窗口显示的是分享屏幕中VirtualDisplay所显示内容的镜像内容,其自己没有内容,而且不能真正响应屏幕操作,若采用ActivityView则会导致屏幕操作事件被自己消费,不符合需求。
其中,可选地,可以设置SurfaceView大小和第一设备中分享窗口大小相同,以便于画面适配显示。
进一步地,其中,将待共享应用的显示画面在所述画布中进行显示,包括:
确定所述接收窗口对应的缓存区,将画面图层堆栈存入所述缓存区中,将该画面图层堆栈与至少一个应用的显示画面图层进行合成,得到包含待共享应用的显示画面的图层合成结果,将图层合成结果在画布中进行显示。
其中,缓存区中存储有接收屏幕中待显示的至少一个应用的显示画面图层。
这里,给出一种显示方式,将共享来的待共享应用的显示画面对应的画面图层堆栈与第二设备中原本需要显示的至少一个应用的显示画面图层进行合成,使得最终合成的显示画面中至少包含待共享应用的显示画面。
在当第二设备中原本需要显示的至少一个应用的显示画面图层未被覆盖时,则最终合成的显示画面中除了包含待共享应用的显示画面外,还包含部分其他应用的显示画面图层。设置待共享应用的显示画面的显示优先级最高。
该实施方式提供更多的显示画面显示方式,满足多种显示场景下的显示应用需求。
在一个可选的应用过程中,可以获取第一设备中分享屏幕内创建的VirtualDisplay的LayerStack和DisplayId,LayerStack和DisplayId数值相同,它决定了该LayerStack中的所有layer在哪个Display设备显示。
接着第二设备中,通过调用SurfaceControl.setDisplayLayerStack(Display,LayerStack)方法告知SurfaceFlinger接收窗口中创建的Display的显示数据(即待共享应用对应的画面图层堆栈)来源于分享屏幕的VirtualDisplay,同时调用SurfaceControl.setDisplaySurface(Display SurfaceView)用SurfaceView去直接显示与之对应的画面图层堆栈合并结果,即待共享应用对应的显示画面。
该过程中,无需跨系统操作,SurfaceView在拿到基于装有画面图层堆栈合并结果的Buffer就可以直接使用,比如直接显示。如果是跨系统操作,比如要分享到另外一个车机系统,因为Buffer数据无法跨系统传输就需要录屏成视频流,视频流数据可以跨系统传输,但是视频流对系统性能消耗很大,本实施例中改变该现有方式,降低性能消耗。
本申请上述实施例,设备在接收到其他设备发送的应用共享指令后,即可基于与待共享应用对应的画面图层堆栈生成待共享应用的显示画面并显示,使设备中在显示待共享应用的显示画面时,该画面是基于存储在设备自身中的画面图层堆栈进行画面自行合并生成,无需像录屏得到的视频流那样跨系统操作,降低性能消耗,且改善应用共享过程中丢帧花屏卡顿的问题。
进一步地,本申请实施例中,在屏幕应用共享基础上,还提出了应用反控的实施情形。
具体地,在步骤202显示待共享应用的显示画面之后,还包括:
检测用户基于所述待共享应用的显示画面触发的应用操作事件;输出应用反控指令至第一设备。
其中,应用反控指令中携带有应用操作事件。其中,应用操作事件用于指示第一设备针对所述待共享应用执行所述应用操作事件。
在实际应用中,在第二设备显示待共享应用的显示画面后,如果用户在第二设备的显示屏中对待共享应用的显示画面区域中做了操作动作,那么第二设备可以基于该操作定位其在待共享应用的显示画面区域中对应于待共享应用中的哪个功能项,基于确定出的目标功能项及用户操作动作,确定出与之对应的应用操作事件,输出应用反控指令至第一设备,以将该应用操作事件传回第一设备使其进行响应处理。
进一步地,在一个情形下,第一设备中分享屏幕和第二设备中接收屏幕的分辨率可能不同,比如分享屏幕是1920*1080,接收屏幕可能是1080*720,可以调整接收窗口中画布SurfaceView的大小让其铺满接收屏幕,具体可以使用setScaleX/setScaleY的方式对画布进行大小调整。
使得接收窗口中待共享应用的显示画面的尺寸与分享窗口中待共享应用的显示画面的尺寸之间的比例,同分享屏幕与接收屏幕之间的尺寸比例相同。
在将接收屏幕上的屏幕操作事件反控到分享屏幕时也会依照该固定比例同步缩放,实现对分享屏幕的反向控制的功能合理实现。
应用操作事件例如为应用画面切换事件、应用播放暂停事件等。
在一个具体实现过程中,第二设备的接收屏幕上可以利用SurfaceControl.createDisplay方法创建一个显示屏幕,该显示屏幕上包含SurfaceView控件,基于该SurfaceView控件,采用createInputForwarder(DisplayId)方法,传入分享屏幕中VirtualDisplay的DisplayId,将接收屏幕上SurfaceView的输入事件(即应用操作事件)转发到分享屏幕中的VirtualDisplay中,从而实现了接收屏幕对分享屏幕的反向控制。
该实现过程中,反控方式充分利用Android原生的InputForwarder方法,实现简单,代码简洁。
该过程,在实现应用共享基础上,提出了应用反控的实施情形,确保应用共享中的功能完善性,使被共享设备中人员的应用操控能够被响应,且确保共享设备中其他未分享的应用不被其他人员随意操控,提升安全性。
本申请实施例还提供一种应用共享装置。
可选地,该应用共享装置包括通信连接至第二设备的第一设备;第一设备用于执行本申请实施例中公开的第一种应用共享方法。
或者,该应用共享装置包括通信连接至第一设备的第二设备;第二设备用于执行本申请实施例中公开的第二种应用共享方法。
或者,参见图3所示,图3是本申请实施例提供的一种应用共享装置的结构图。该应用共享装置包括通信连接至第二设备的第一设备,及包括通信连接至第一设备的第二设备;所述第一设备用于执行本申请实施例中公开的第一种应用共享方法,所述第二设备用于执行本申请实施例中公开的第二种应用共享方法。
示例性地,该应用共享装置例如为车载终端等,第一设备与第二设备例如为车载终端中的第一显示设备及第二显示设备。
其中,不同设备的的第一设备中包含显示屏,该显示屏形成为分享屏幕;第二设备中包含显示屏,该显示屏形成为接收屏幕。分享屏幕与接收屏幕对应于第一设备与第二设备在应用共享方法实施过程的角色划分,并不对不同设备中各自的显示屏形成任何其他意义上的实质限定。
本申请实施例提供的应用共享装置能够实现上述应用共享方法的实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
图4是本申请实施例提供的一种车载设备的结构图。如该图所示,该实施例的车载设备4包括:至少一个处理器40(图4中仅示出一个)、存储器41以及存储在所述存储器41中并可在所述至少一个处理器40上运行的计算机程序42,所述处理器40执行所述计算机程序42时实现上述任意各个方法实施例中的步骤。
所述车载设备4可包括,但不仅限于,处理器40、存储器41。本领域技术人员可以理解,图4仅仅是车载设备4的示例,并不构成对车载设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述车载设备还可以包括输入输出设备、网络接入设备、总线等。
所述处理器40可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器41可以是所述车载设备4的内部存储单元,例如车载设备4的硬盘或内存。所述存储器41也可以是所述车载设备4的外部存储设备,例如所述车载设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器41还可以既包括所述车载设备4的内部存储单元也包括外部存储设备。所述存储器41用于存储所述计算机程序以及所述车载设备所需的其他程序和数据。所述存储器41还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/车载设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/车载设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序产品来实现,当计算机程序产品在车载设备上运行时,使得所述车载设备执行时实现可实现上述各个方法实施例中的步骤。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (12)
1.一种应用共享方法,其特征在于,应用于第一设备,所述方法包括:
在分享屏幕中创建虚拟屏幕,所述虚拟屏幕用于显示待共享应用的显示画面;
基于所述虚拟屏幕,获取与所述待共享应用的显示画面对应的画面图层堆栈;
发送应用共享指令至第二设备,所述应用共享指令中携带有所述画面图层堆栈,所述应用共享指令指示所述第二设备基于所述画面图层堆栈显示所述待共享应用的显示画面。
2.根据权利要求1所述的方法,其特征在于,所述在分享屏幕中创建虚拟屏幕,包括:
在所述分享屏幕中创建分享窗口;
在所述分享窗口中创建画布,其中,所述画布被创建时,所述虚拟屏幕被创建于所述画布中。
3.根据权利要求2所述的方法,其特征在于,所述基于所述虚拟屏幕,获取与所述待共享应用的显示画面对应的画面图层堆栈,包括:
基于所述虚拟屏幕,确定所述虚拟屏幕所在的所述分享窗口对应的缓存区,所述缓存区中存储有与所述待共享应用对应的多个显示画面图层;
从所述缓存区中提取所述显示画面图层,得到与所述待共享应用的显示画面对应的所述画面图层堆栈。
4.根据权利要求2所述的方法,其特征在于,所述在分享屏幕中创建虚拟屏幕之后,还包括:
从所述分享屏幕所显示的至少一个应用中确定待共享应用,并确定所述待共享应用对应的显示画面图层;
将所述显示画面图层存入所述分享窗口对应的缓存区中;
对所述缓存区中的存储的所述显示画面图层进行合成,将合成后的显示画面在所述虚拟屏幕中进行输出显示。
5.根据权利要求4所述的方法,其特征在于,所述发送应用共享指令至第二设备之后,还包括:
获取所述第二设备输入的应用反控指令,所述应用反控指令携带有应用操作事件,所述应用操作事件为用户基于所述第二设备中显示的所述待共享应用的显示画面进行触发;
响应所述应用反控指令,执行所述应用操作事件,并基于所述应用操作事件的执行结果对所述缓存区中的所述显示画面图层进行更新;
对所述缓存区中更新后的所述显示画面图层进行合成,将合成后的显示画面在所述虚拟屏幕中进行输出显示。
6.一种应用共享方法,其特征在于,应用于第二设备,所述方法包括:
接收第一设备发送的应用共享指令;所述应用共享指令中携带有与待共享应用的显示画面对应的画面图层堆栈;所述画面图层堆栈为基于所述第一设备在分享屏幕中创建的虚拟屏幕获取得到,所述虚拟屏幕用于显示所述待共享应用的显示画面;
响应所述应用共享指令,对所述画面图层堆栈进行合成,得到所述待共享应用的显示画面并显示所述待共享应用的显示画面。
7.根据权利要求6所述的方法,其特征在于,所述显示所述待共享应用的显示画面,包括:
在接收屏幕中创建接收窗口;
在所述接收窗口中创建画布,将所述待共享应用的显示画面在所述画布中进行显示。
8.根据权利要求7所述的方法,其特征在于,所述将所述待共享应用的显示画面在所述画布中进行显示,包括:
确定所述接收窗口对应的缓存区,所述缓存区中存储有所述接收屏幕中待显示的至少一个应用的显示画面图层;
将所述画面图层堆栈存入所述缓存区中;
将所述画面图层堆栈与至少一个所述应用的显示画面图层进行合成,得到包含所述待共享应用的显示画面的图层合成结果,将所述图层合成结果在所述画布中进行显示。
9.根据权利要求6所述的方法,其特征在于,所述显示所述待共享应用的显示画面之后,还包括:
检测用户基于所述待共享应用的显示画面触发的应用操作事件;
输出应用反控指令至所述第一设备,所述应用反控指令中携带有所述应用操作事件;所述应用操作事件用于指示所述第一设备针对所述待共享应用执行所述应用操作事件。
10.一种应用共享装置,其特征在于,包括通信连接至第二设备的第一设备和/或包括通信连接至所述第一设备的所述第二设备;所述第一设备用于执行如权利要求1至5任一项所述的方法,所述第二设备用于执行如权利要求6至9任一项所述的方法。
11.一种车载设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5或6至9中任一项所述方法的步骤。
12.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5或6至9中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310894644.9A CN116932113A (zh) | 2023-07-20 | 2023-07-20 | 一种应用共享方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310894644.9A CN116932113A (zh) | 2023-07-20 | 2023-07-20 | 一种应用共享方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116932113A true CN116932113A (zh) | 2023-10-24 |
Family
ID=88393755
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310894644.9A Pending CN116932113A (zh) | 2023-07-20 | 2023-07-20 | 一种应用共享方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116932113A (zh) |
-
2023
- 2023-07-20 CN CN202310894644.9A patent/CN116932113A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7114633B2 (ja) | 画面ミラーリング方法、装置、端末及び記憶媒体 | |
CN109618177B (zh) | 视频处理方法、装置、电子设备及计算机可读存储介质 | |
US12061833B2 (en) | Multi-window display method, electronic device, and system | |
JP7536173B2 (ja) | アプリケーションインターフェースの切り替え方法及び装置、端末並びに記憶媒体 | |
CN112261226B (zh) | 横屏交互方法、装置、电子设备和存储介质 | |
JP2022031339A (ja) | 表示方法およびデバイス | |
CN111966252A (zh) | 应用窗口显示方法和电子设备 | |
US8601105B2 (en) | Apparatus, method and computer program product for faciliating communication with virtual machine | |
CN110377263B (zh) | 图像合成方法、装置、电子设备及存储介质 | |
CN110908625A (zh) | 多屏显示方法、装置、设备、系统、舱体及存储介质 | |
CN109508128B (zh) | 搜索控件显示方法、装置、设备及计算机可读存储介质 | |
CN111629239B (zh) | 投屏处理方法、装置、设备及计算机可读存储介质 | |
CN111597000A (zh) | 一种小窗口管理方法及终端 | |
CN111790148B (zh) | 游戏场景中的信息交互方法、设备及计算机可读介质 | |
WO2014101418A1 (zh) | 视频预览显示方法和终端设备 | |
CN114095776B (zh) | 屏幕录制方法及电子设备 | |
CN113672184A (zh) | 屏幕扩展方法、装置、终端设备及计算机可读存储介质 | |
CN110401877B (zh) | 视频播放的控制方法、装置、电子设备、及存储介质 | |
KR20150033162A (ko) | 컴포지터, 이를 포함하는 시스템온칩 및 이의 구동 방법 | |
JP2023536365A (ja) | ビデオ処理方法及び装置 | |
WO2022242628A1 (zh) | 投屏方法、装置、设备及存储介质 | |
WO2024169824A1 (zh) | 页面控制方法、装置及电子设备 | |
CN113835657A (zh) | 显示方法及电子设备 | |
CN113094015A (zh) | 全息多屏显示实现方法、系统、计算机设备和存储介质 | |
US20230276079A1 (en) | Live streaming room page jump method and apparatus, live streaming room page return method and apparatus, and electronic device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |