CN114217763B - 在Linux上兼容Android应用的窗口双屏协同显示方法 - Google Patents
在Linux上兼容Android应用的窗口双屏协同显示方法 Download PDFInfo
- Publication number
- CN114217763B CN114217763B CN202210159598.3A CN202210159598A CN114217763B CN 114217763 B CN114217763 B CN 114217763B CN 202210159598 A CN202210159598 A CN 202210159598A CN 114217763 B CN114217763 B CN 114217763B
- Authority
- CN
- China
- Prior art keywords
- screen
- window
- android application
- linux
- android
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
- G06F3/1423—Digital output to display device ; Cooperation and interconnection of the display device with other functional units controlling a plurality of local displays, e.g. CRT and flat panel display
-
- 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/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明公开了一种在Linux上兼容Android应用的窗口双屏协同显示方法,包括:在Linux系统上运行容器里的Android兼容环境,并启动Android系统;在Linux系统中创建用于显示Android应用的Linux视窗;在Android系统中创建Android应用窗口,Android应用窗口设有单屏模式和双屏模式,在单屏模式下,Android应用窗口显示主屏,在双屏模式下,Android应用窗口显示主屏和副屏;将Linux视窗与Android应用窗口绑定,以使Android应用通过Linux视窗显示;Linux系统向Android系统发送Android应用的启动命令;Android系统接受启动命令后启动Android应用;根据应用活动界面的参数调整Android应用窗口为单屏模式或双屏模式进行显示。通过本方法,用户能够在Linux系统上实现Android应用的双屏协同显示的功能。
Description
技术领域
本发明涉及Android图形显示技术领域,尤其涉及一种在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上有关图形界面的功能都是由X视窗系统提供的,运行着应用软件的进程都不直接访问显示屏,也不直接进行图形方面的操作运算,而是通过进程间通信将绘图命令发送给X服务进程,由X服务进程加以实施。X视窗系统(X Window System)是Linux图形用户环境的基础,基于一种独特的服务器/客户机架构,由X服务器、X客户端、窗口管理器、显示管理器等组成,其中X服务器用于实际控制输入设备(如键盘、鼠标等)和位图式输出设备(如显示器),X服务器定义了给X客户端使用这些设备的抽象接口;窗口管理器负责控制应用程序窗口的各种行为,从本质上来说,窗口管理器是一种特殊的X客户端程序,因为这些功能也是需要向X服务器发送指令实现的。
在Android系统中,所有的图形界面窗口功能全都由Android系统提供,而Linux上的应用依赖于X视窗系统。在Linux系统上运行Android应用需要Android API及运行环境,且无法在Linux系统上动态调整Android应用的显示效果,尤其是在玩游戏、看新闻、看视频需要进行全屏或分屏操作时,无法给用户最佳的体验感受。因此,要在Linux系统上运行Android应用,实现一个Android应用在双屏模式下以最佳的图形界面展现给用户,就需要解决整合Android应用的窗口显示问题,使得一个Android应用也能在Linux系统上使用双屏协同显示更多应用内容。
发明内容
本发明提供了一种在Linux上兼容Android应用的窗口双屏协同显示方法,能够使得Android应用在Linux系统上实现双屏协同显示的功能。
有鉴于此,本发明提供了一种在Linux上兼容Android应用的窗口双屏协同显示方法,所述方法包括步骤:
在Linux系统上运行容器里的Android兼容环境,并启动Android系统;
在Linux系统中创建用于显示Android应用的Linux视窗;
在Android系统中创建Android应用窗口,所述Android应用窗口设有单屏模式和双屏模式,在所述单屏模式下,所述Android应用窗口显示主屏,在所述双屏模式下,所述Android应用窗口显示主屏和副屏;
将所述Linux视窗与所述Android应用窗口绑定,以使Android应用通过Linux视窗显示;
Linux系统向Android系统发送Android应用的启动命令;
Android系统接受所述启动命令后启动所述Android应用;
根据应用活动界面的参数调整所述Android应用窗口为单屏模式或双屏模式进行显示。
本方法通过在Linux系统上运行Android兼容环境,以使得Android系统能够在Linux系统中启动并显示。通过将Linux视窗与Android应用窗口绑定,用户便能够在Linux视窗中查看Android应用。用户可通过Linux系统向Android系统发送Android应用的启动命令,以启动Android应用。Android应用在启动时,会基于当前的Activity的参数来自动调整Android应用窗口显示为单屏模式或双屏模式。启动完成后,用户还能够通过Linux视窗控制Android应用窗口在单屏模式和双屏模式之间切换,从而使得Android应用单屏显示或双屏显示。因此,通过本方法,用户能够在Linux系统上方便地查看Android应用,同时还能够自由地将Android应用窗口切换为单屏模式或双屏模式,以供用户选择最佳的图形展示界面。
可选地,所述Linux视窗与Android应用窗口绑定包括步骤:
判断Linux系统是否启动Android应用;
若否,Linux系统保持当前状态;
若是,Linux系统创建用于显示所述Android应用的Linux视窗;
Android系统创建所述Android应用窗口;
Android系统通过Zygote进程创建Android应用,所述Android应用在所述Android应用窗口中显示;
Linux视窗与Android应用窗口通过socket通信接口进行绑定。
可选地,所述在Android系统中创建Android应用窗口包括步骤:
判断所述Android应用是否支持双屏模式;
若否,所述Android系统创建一个OverlayDisplay窗口,以形成所述Android应用窗口的主屏;
若是,Android系统创建两个OverlayDisplay窗口,对应有两块显示区域,以形成所述Android应用窗口的主屏和副屏,其中所述副屏默认隐藏。
可选地,所述OverlayDisplay窗口包含displayId、包名、密度、宽高参数。
可选地,该方法还包括:
所述Linux系统通过socket通信接口发送Android应用的启动命令;
Android系统以startActivity形式启动Android应用;
在启动应用时,根据配置的action和category启动主Activity;
主Activity显示在所述主屏中,并创建其任务栈信息;
当启动其他Activity时,根据setLaunchDisplayId参数指定所述其他Activity在主屏或副屏显示。
可选地,该方法还包括,控制Android应用窗口的副屏为显示或隐藏状态:
当指定所述其他Activity在副屏显示时;
通过Linux视窗控制副屏显示,并创建所述其他Activity的任务栈信息,所述Android应用窗口切换为双屏模式;
当在副屏显示的所述其他Activity的任务栈退出时;
通过所述Linux视窗控制副屏隐藏,以使所述Android应用窗口变成单屏模式。
可选地,所述方法还包括步骤:
当所述主屏或所述副屏需要调节为全屏时;
若将所述主屏调为全屏状态,所述副屏相应隐藏;
当所述主屏退出全屏状态时,若所述副屏原先处于隐藏状态,则所述Android应用窗口恢复单屏模式,且仅展示主屏,若所述副屏原先处于显示状态,则所述Android应用窗口恢复双屏模式;
若将所述副屏调为全屏状态,所述主屏相应隐藏;
当所述副屏退出全屏状态时,所述主屏相应显示,所述Android应用窗口恢复双屏模式。
可选地,所述方法还包括,控制所述Android应用窗口单屏模式和双屏模式的焦点切换:
当所述Android应用启动时,所述副屏默认隐藏,焦点位于所述主屏;
当启动Activity界面时,若所述Activity界面在所述主屏显示,则焦点保持不变;
若所述Activity界面在副屏显示,则通过所述Linux视窗创建副屏,并将焦点切换至所述副屏;
若所述应用界面在所述主屏和所述副屏都显示,通过event事件对主屏和副屏进行焦点切换;
若焦点在副屏,当副屏隐藏时焦点自动切回到主屏;
Linux视窗失去焦点,保存当前窗口中的焦点状态;
Linux视窗获得焦点,还原窗口中的焦点状态。
附图说明
为了更清楚地表达说明本发明的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种在Linux上兼容Android应用的窗口双屏协同显示方法的流程示意图;
图2为本发明一实施例中的Android应用窗口的单屏模式和双屏模式切换的示意图;
图3为本发明一实施例中的Android应用窗口在第一状态下的架构示意图;
图4为本发明一实施例中的Android应用窗口在第二状态下的架构示意图;
图5为本发明一实施例中的Android应用窗口在第三状态下的架构示意图;
图6为本发明一实施例中的Android应用窗口在第四状态下的架构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。
在本发明实施例的描述中,需要说明的是,术语““上”、“下”、““左”、“右”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明实施例和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明实施例的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明实施例的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明实施例中的具体含义。
在介绍本发明的实施例之前,首先对本文中涉及的若干术语进行解释。
1、容器技术:容器是由Linux内核支持的一种轻量级虚拟技术。通过容器技术可以在Linux系统中运行一个新的系统,包括其他基于Linux系统定制的系统,如Android系统,容器使得客户机系统和主机系统相互隔离。与传统的基于虚拟机技术的方案不同,在容器技术中,客户系统与主机系统共享CPU、内存、存储等资源,资源开销很低。此外,通过适当的配置,还能使客户系统直接访问主机的硬件资源,进一步提升客户系统的性能。
2、Activity:Activity是一种Android应用的组件,通常,开启一个Activity时,系统会提供一个交互界面,用户可以通过该界面进行交互,以完成某项任务。即Activity是用户能够操作的活动界面。在Android系统中启动页面时,通常需要调用context类中的startActivity方法来对Activity进行启动操作。startActivity是一种启动方法,通常用于启动一个Activity。另外,一个Android应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主Activity,也就是首次启动应用时给用户呈现的Activity。
3、socket通信接口:socket通信接口即套接字接口。socket通信接口是一种独立于协议的网络编程接口,它屏蔽了底层通信软件和具体操作系统的差异,实现安装TCP协议软件和实现套接字规范的计算机之间的通信。
4、Zygote进程:Zygote进程是在系统开机时产生的,在Android系统中,大部分应用程序通过Zygote进程启动,Zygote进程能够完成虚拟机的初始化、库的加载、预置类库的加载等操作。对于一些只读的系统库,所有虚拟机都和Zygote共享一块内存区域,从而节省了内存的开销。即通过Zygote进程创建Android应用能够节省系统的内存。
5、OverlayDisplay窗口:OverlayDisplay窗口是指Android系统通过OverlayDisplay创建的虚拟屏幕。通过OverlayDisplay创建的虚拟屏幕不对应实际的物理屏幕设备,而是在实际屏幕设备的layerstack上创建一个layer,作为虚拟屏幕的显示载体。通过OverlayDisplay创建的虚拟屏幕具有速度快、画质好、占用系统资源少等特点。
6、setLaunchDisplayId:setLaunchDisplayId是一种函数,用于指定Activity在启动后应显示在哪个显示屏上。
下面结合附图详细描述本发明的实施例。
请参阅图1和图2,在一些实施例中,本发明提供了一种在Linux上兼容Android应用的窗口双屏协同显示方法,该方法包括以下步骤:
在Linux系统上运行容器里的Android兼容环境,并启动Android系统;
在Linux系统中创建用于显示Android应用的Linux视窗;
在Android系统中创建Android应用窗口,所述Android应用窗口设有单屏模式和双屏模式,在所述单屏模式下,所述Android应用窗口显示主屏,在所述双屏模式下,所述Android应用窗口显示主屏和副屏;
将所述Linux视窗与所述Android应用窗口绑定,以使Android应用通过Linux视窗显示;
Linux系统向Android系统发送Android应用的启动命令;
Android系统接受所述启动命令后启动所述Android应用;
根据应用活动界面的参数调整所述Android应用窗口为单屏模式或双屏模式进行显示。
本方法通过容器技术在Linux系统上运行Android兼容环境,以使得Android系统能够在Linux系统中启动并显示。通过将Linux视窗与Android应用窗口绑定,用户便能够在Linux视窗中查看Android应用。用户可通过Linux系统向Android系统发送Android应用的启动命令,以启动Android应用。Android应用在启动时,会基于当前的Activity的参数来自动调整Android应用窗口显示为单屏模式或双屏模式。启动完成后,用户还能够通过Linux视窗控制Android应用窗口在单屏模式和双屏模式之间切换,从而使得Android应用单屏显示或双屏显示。因此,通过本方法,用户能够在Linux系统上方便地查看Android应用,同时还能够自由地将Android应用窗口切换为单屏模式或双屏模式,以供用户选择最佳的图形展示界面。
在一些实施例中,Linux视窗与Android应用窗口绑定包括以下步骤:
判断Linux系统是否启动Android应用;
若否,Linux系统保持当前状态;
若是,Linux系统创建用于显示Android应用的Linux视窗;
Android系统创建Android应用窗口;
Android系统通过Zygote进程创建Android应用,Android应用在Android应用窗口中显示;
Linux视窗与Android应用窗口通过socket通信接口进行绑定。
需要说明的是,主屏和副屏是左右并列设置的显示窗口,主屏位于左侧,副屏位于右侧。主屏默认处于显示状态,副屏默认处于隐藏状态。具体如图2所示,在最初创建状态下,Android应用窗口处于单屏模式。
请参阅图3,在Android系统中创建Android应用窗口包括以下步骤:
判断Android应用是否支持双屏模式;
若否,Android系统创建一个OverlayDisplay窗口,以形成Android应用窗口的主屏;
若是,Android系统创建两个OverlayDisplay窗口,对应有两块显示区域,以形成Android应用窗口的主屏和副屏,其中副屏默认隐藏。
其中,Android应用窗口包含displayId、包名、密度、宽高等参数。
具体地,Android应用窗口中的两个OverlayDisplay窗口左右并列设置,其中左侧的OverlayDisplay窗口设置为主屏,右侧的OverlayDisplay窗口设置为副屏。副屏默认处于隐藏状态。因此,在启动Android应用时,Android应用窗口处于单屏模式,仅显示主屏。进一步地,将Linux视窗与Android应用窗口绑定后,启动Android应用时,用户便能够通过Linux视窗查看Android应用。
请参阅图2,在一些实施例中,该方法还包括:
Linux系统通过socket通信接口发送Android应用的启动命令;
Android系统以startActivity形式启动Android应用;
在启动应用时,根据配置的action和category启动主Activity;
主Activity显示在主屏中,并创建其任务栈信息;
当启动其他Activity时,根据setLaunchDisplayId参数指定其他Activity在主屏或副屏显示。
其中,Action表示所要执行的某种动作,除了系统定义的Action外,开发者也可自定义Action;category指定响应请求动作的组件的类别信息。通过配置好的action和category以启动主Activity。
需要说明的是,左侧OverlayDisplay窗口设定为主屏,因此启动主Activity时,主Activity显示在左侧OverlayDisplay窗口中。
另外,本方法包括还控制Android应用窗口的副屏为显示或隐藏状态的步骤:
当指定所述其他Activity在副屏显示时;
通过Linux视窗控制副屏显示,并创建所述其他Activity的任务栈信息,所述Android应用窗口切换为双屏模式;
当在副屏显示的所述其他Activity的任务栈退出时;
通过所述Linux视窗控制副屏隐藏,以使所述Android应用窗口变成单屏模式。
示例性地,根据setLaunchDisplayId参数指定Activity显示在副屏时,若副屏处于不存在的状态下,则创建副屏并创建Activity的任务栈信息,此时Android应用窗口由单屏模式切换为双屏模式,并使该Activity在副屏显示。当然,若副屏原本就处于存在的状态下,则直接创建Activity的任务栈信息。需要说明的是,当副屏的Activity任务栈退出时,Activity界面销毁,Linux视窗控制隐藏副屏窗口,此时Android应用窗口变回单屏模式。
请参阅图5和图6,该方法还包括步骤:
当主屏或副屏需要调节为全屏时;
若将主屏调为全屏状态,副屏相应隐藏;
当主屏退出全屏状态时,若副屏原先处于隐藏状态,则Android应用窗口恢复单屏模式,且仅展示主屏,若副屏原先处于显示状态,则Android应用窗口恢复双屏模式;
若将副屏调为全屏状态,主屏相应隐藏;
当副屏退出全屏状态时,主屏相应显示,Android应用窗口恢复双屏模式。
具体如图5所示,若副屏原先处于隐藏状态,即Android应用窗口处于单屏模式。当主屏进入全屏状态时,主屏由竖屏变成横屏。若副屏原先处于显示状态,即Android应用窗口处于双屏模式,当主屏进入全屏时,主屏由竖屏变成横屏,副屏自动进入隐藏状态。当然,当主屏退出全屏状态时,若副屏原先处于隐藏状态,则Android应用窗口由全屏状态切换回单屏模式。若副屏原先处于显示状态,则Android应用窗口由全屏状态切换回双屏模式。
另外,具体如图6所示,当副屏进入全屏状态时,副屏由竖屏变成横屏,主屏进入隐藏状态。当副屏退出全屏状态时,副屏由横屏变成竖屏,主屏由隐藏状态变回显示状态,即Android应用窗口切换回双屏模式。
在一些实施例中,该方法还包括控制Android应用窗口单屏模式和双屏模式的焦点切换的步骤:
当Android应用启动时,副屏默认隐藏,焦点位于主屏;
当启动Activity界面时,若Activity界面在主屏显示,则焦点保持不变;
若Activity界面在副屏显示,则通过Linux视窗创建副屏,并将焦点切换至副屏;
若应用界面在主屏和副屏都显示,通过event事件对主屏和副屏进行焦点切换;
若焦点在副屏,当副屏隐藏时焦点自动切回到主屏;
Linux视窗失去焦点,保存当前窗口中的焦点状态;
Linux视窗获得焦点,还原窗口中的焦点状态。
请参阅图3、图4、图5和图6,Android应用窗口具有四种状态,图3至图6分别对应其中一种状态。其中,图3是Android应用窗口在第一状态下的示意图,即Android应用窗口处于单屏模式下的示意图。当Android应用中的Activity首次启动完成时,主屏默认为显示状态,副屏默认为隐藏状态。
图4是Android应用窗口在第二状态下的示意图,主屏和副屏均处于显示状态,即Android应用窗口处于双屏状态下的示意图。当副屏的Activity任务栈创建时,Linux视窗控制副屏转换为显示状态,Activity界面在副屏展示,Android应用窗口由第一状态切换到第二状态,并进入双屏模式。
图5是Android应用窗口在第三状态下的示意图,主屏处于显示状态,副屏处于隐藏状态。若副屏原先处于隐藏状态,即Android应用窗口处于第一状态,当主屏进入全屏状态时,主屏由竖屏变成横屏,Android应用窗口由第一状态切换到第三状态。若副屏原先处于显示状态,即Android应用窗口处于第二状态,当主屏进入全屏时,主屏由竖屏变成横屏,副屏自动进入隐藏状态,Android应用窗口由第二状态切换到第三状态。另外,需要说明的是,当主屏退出全屏状态时,若副屏原先处于隐藏状态,则Android应用窗口由第三状态切换回第一状态。若副屏原先处于显示状态,则Android应用窗口由第三状态状态切换回第二状态。
图6是Android应用窗口在第四状态下的示意图,主屏处于隐藏状态,副屏处于显示状态。当副屏进入全屏状态时,副屏由竖屏变成横屏,主屏进入隐藏状态,Android应用窗口由第二状态切换到第四状态。当副屏退出全屏状态时,副屏由横屏变成竖屏,主屏由隐藏状态变回显示状态,Android应用窗口由第四状态切换回第二状态。
需要说明的是,图3至图5中的实线标注框均是指处于显示状态下的OverlayDisplay窗口,虚线标注框均是指处于隐藏状态下的OverlayDisplay窗口。因此,可以理解的是,图5中的主屏处于全屏状态,虚线标注框仅仅是为了方便表述,不应当理解为主屏和副屏的实际布局。同理,图6中的副屏处于全屏状态,主屏处于隐藏状态。
本发明提供的一种在Linux上兼容Android应用的窗口双屏协同显示方法,对运行在Linux桌面操作系统上的Android应用窗口进行改造,将其整合到Linux操作系统的X视窗系统中,让X视窗系统兼容并改进Android应用窗口显示效果。Android应用窗口状态能根据Activity的参数动态调整显示状态,进而能够实现人机交互时,由Linux系统统一接收窗口状态,并更新Linux视窗的显示数据,使得Linux操作系统上的Android应用有更丰富的显示效果,极大地提升用户体验感受。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (7)
1.一种在Linux上兼容Android应用的窗口双屏协同显示方法,其特征在于,所述方法包括步骤:
在Linux系统上运行容器里的Android兼容环境,并启动Android系统;
在Linux系统中创建用于显示Android应用的Linux视窗;
在Android系统中创建Android应用窗口,所述Android应用窗口设有单屏模式和双屏模式,在所述单屏模式下,所述Android应用窗口显示主屏,在所述双屏模式下,所述Android应用窗口显示主屏和副屏;
将所述Linux视窗与所述Android应用窗口绑定,以使Android应用通过Linux视窗显示;
Linux系统向Android系统发送Android应用的启动命令;
Android系统接受所述启动命令后启动所述Android应用;
根据应用活动界面的参数调整所述Android应用窗口为单屏模式或双屏模式进行显示;
所述方法还包括:
所述Linux系统通过socket通信接口发送Android应用的启动命令;
Android系统以startActivity形式启动Android应用;
在启动应用时,根据配置的action和category启动主Activity;
主Activity显示在所述主屏中,并创建其任务栈信息;
当启动其他Activity时,根据setLaunchDisplayId参数指定所述其他Activity在主屏或副屏显示。
2.根据权利要求1所述的一种在Linux上兼容Android应用的窗口双屏协同显示方法,其特征在于,所述Linux视窗与Android应用窗口绑定包括步骤:
判断Linux系统是否启动Android应用;
若否,Linux系统保持当前状态;
若是,Linux系统创建用于显示所述Android应用的Linux视窗;
Android系统创建所述Android应用窗口;
Android系统通过Zygote进程创建Android应用,所述Android应用在所述Android应用窗口中显示;
Linux视窗与Android应用窗口通过socket通信接口进行绑定。
3.根据权利要求1所述的一种在Linux上兼容Android应用的窗口双屏协同显示方法,其特征在于,所述在Android系统中创建Android应用窗口包括步骤:
判断所述Android应用是否支持双屏模式;
若否,所述Android系统创建一个OverlayDisplay窗口,以形成所述Android应用窗口的主屏;
若是,Android系统创建两个OverlayDisplay窗口,对应有两块显示区域,以形成所述Android应用窗口的主屏和副屏,其中所述副屏默认隐藏。
4.根据权利要求3所述的一种在Linux上兼容Android应用的窗口双屏协同显示方法,其特征在于,所述OverlayDisplay窗口包含displayId、包名、密度、宽高参数。
5.据权利要求1所述的一种在Linux上兼容Android应用的窗口双屏协同显示方法,其特征在于,所述方法还包括,控制Android应用窗口的副屏为显示或隐藏状态:
当指定所述其他Activity在副屏显示时;
通过Linux视窗控制副屏显示,并创建所述其他Activity的任务栈信息,所述Android应用窗口切换为双屏模式;
当在副屏显示的所述其他Activity的任务栈退出时;
通过所述Linux视窗控制副屏隐藏,以使所述Android应用窗口变成单屏模式。
6.根据权利要求5所述的一种在Linux上兼容Android应用的窗口双屏协同显示方法,其特征在于,所述方法还包括步骤:
当所述主屏或所述副屏需要调节为全屏时;
若将所述主屏调为全屏状态,所述副屏相应隐藏;
当所述主屏退出全屏状态时,若所述副屏原先处于隐藏状态,则所述Android应用窗口恢复单屏模式,且仅展示主屏,若所述副屏原先处于显示状态,则所述Android应用窗口恢复双屏模式;
若将所述副屏调为全屏状态,所述主屏相应隐藏;
当所述副屏退出全屏状态时,所述主屏相应显示,所述Android应用窗口恢复双屏模式。
7.根据权利要求1所述的一种在Linux上兼容Android应用的窗口双屏协同显示方法,其特征在于,所述方法还包括,控制所述Android应用窗口单屏模式和双屏模式的焦点切换:
当所述Android应用启动时,所述副屏默认隐藏,焦点位于所述主屏;
当启动Activity界面时,若所述Activity界面在所述主屏显示,则焦点保持不变;
若所述Activity界面在副屏显示,则通过所述Linux视窗创建副屏,并将焦点切换至所述副屏;
若所述应用活动界面在所述主屏和所述副屏都显示,通过event事件对主屏和副屏进行焦点切换;
若焦点在副屏,当副屏隐藏时焦点自动切回到主屏;
Linux视窗失去焦点,保存当前窗口中的焦点状态;
Linux视窗获得焦点,还原窗口中的焦点状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210159598.3A CN114217763B (zh) | 2022-02-22 | 2022-02-22 | 在Linux上兼容Android应用的窗口双屏协同显示方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210159598.3A CN114217763B (zh) | 2022-02-22 | 2022-02-22 | 在Linux上兼容Android应用的窗口双屏协同显示方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114217763A CN114217763A (zh) | 2022-03-22 |
CN114217763B true CN114217763B (zh) | 2022-05-20 |
Family
ID=80709173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210159598.3A Active CN114217763B (zh) | 2022-02-22 | 2022-02-22 | 在Linux上兼容Android应用的窗口双屏协同显示方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114217763B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114611118A (zh) * | 2022-05-12 | 2022-06-10 | 麒麟软件有限公司 | 基于Linux系统的安卓多窗口应用锁屏的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108205411A (zh) * | 2017-09-30 | 2018-06-26 | 中兴通讯股份有限公司 | 显示切换方法及装置、终端 |
CN109669765A (zh) * | 2017-10-17 | 2019-04-23 | 中兴通讯股份有限公司 | 应用切换方法及装置 |
CN111124562A (zh) * | 2019-11-15 | 2020-05-08 | 北京经纬恒润科技有限公司 | 应用程序双屏显示方法及装置 |
WO2021093619A1 (zh) * | 2019-11-12 | 2021-05-20 | 厦门亿联网络技术股份有限公司 | 用于Android系统双屏异显的多输入设备交互方法、装置及介质 |
CN112860363A (zh) * | 2021-02-07 | 2021-05-28 | 麒麟软件有限公司 | 一种基于Linux系统的Android应用窗口状态动态更新方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107291456B (zh) * | 2017-06-06 | 2020-12-04 | 福州汇思博信息技术有限公司 | 一种多屏显示的控制方法及系统 |
CN112114916B (zh) * | 2020-08-31 | 2021-06-08 | 北京技德系统技术有限公司 | 一种在Linux操作系统上兼容运行Android应用的方法和装置 |
CN112269604B (zh) * | 2020-11-11 | 2021-06-01 | 北京技德系统技术有限公司 | 在Linux上兼容运行Android应用的窗口交互方法及装置 |
CN113312016A (zh) * | 2021-05-10 | 2021-08-27 | 南京市德赛西威汽车电子有限公司 | 一种车载娱乐系统中双屏异显的方法 |
-
2022
- 2022-02-22 CN CN202210159598.3A patent/CN114217763B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108205411A (zh) * | 2017-09-30 | 2018-06-26 | 中兴通讯股份有限公司 | 显示切换方法及装置、终端 |
CN109669765A (zh) * | 2017-10-17 | 2019-04-23 | 中兴通讯股份有限公司 | 应用切换方法及装置 |
WO2021093619A1 (zh) * | 2019-11-12 | 2021-05-20 | 厦门亿联网络技术股份有限公司 | 用于Android系统双屏异显的多输入设备交互方法、装置及介质 |
CN111124562A (zh) * | 2019-11-15 | 2020-05-08 | 北京经纬恒润科技有限公司 | 应用程序双屏显示方法及装置 |
CN112860363A (zh) * | 2021-02-07 | 2021-05-28 | 麒麟软件有限公司 | 一种基于Linux系统的Android应用窗口状态动态更新方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114217763A (zh) | 2022-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112269604B (zh) | 在Linux上兼容运行Android应用的窗口交互方法及装置 | |
US10528210B2 (en) | Foreground/background assortment of hidden windows | |
CN104216752B (zh) | 一种基于窗口的信息加载方法及装置 | |
US9348633B2 (en) | Multi-environment operating system | |
CN112860363A (zh) | 一种基于Linux系统的Android应用窗口状态动态更新方法 | |
US8957905B2 (en) | Cross-environment user interface mirroring | |
US8819705B2 (en) | User interaction support across cross-environment applications | |
EP2622463B1 (en) | Instant remote rendering | |
US8933949B2 (en) | User interaction across cross-environment applications through an extended graphics context | |
US9372711B2 (en) | System and method for initiating a multi-environment operating system | |
CN113157362B (zh) | 一种应用于Linux上Android多窗口显示方法 | |
US20120173986A1 (en) | Background synchronization within a multi-environment operating system | |
US20240111473A1 (en) | Distributed display method and terminal for application interface | |
CN102918490A (zh) | 与在平板计算装置的虚拟桌面内显示的远程应用交互 | |
US5748930A (en) | Method and apparatus for interfacing with a host computer system sharing tasks with another user on a client computer system | |
CN114217763B (zh) | 在Linux上兼容Android应用的窗口双屏协同显示方法 | |
WO2023155561A1 (zh) | 在Linux兼容安卓系统上进行左右分屏的方法 | |
CN111596916A (zh) | 一种应用程序管理方法、装置、设备及计算机存储介质 | |
CN112988419A (zh) | 一种将Linux输入法共享给Android的方法 | |
US6961944B2 (en) | Method and system for accessing operating system resources | |
CN114611118A (zh) | 基于Linux系统的安卓多窗口应用锁屏的方法 | |
CN102508665B (zh) | 绘制应用程序视图的方法和装置 | |
CN112711728A (zh) | 页面布局框架、页面加载方法、装置、设备及存储介质 | |
CN110750296A (zh) | 一种应用处理方法及装置 | |
CN116261713A (zh) | 桌面应用控制方法、装置、电子设备及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |