android在副屏中运行一个应用_一种在双屏智能终端上实现双APP同时运行的方法与流程...

本发明涉及智能终端APP管理方法,特别是涉及一种在双屏智能终端上实现双APP同时运行的方法。

背景技术:

对于双屏双触控的智能终端,常常需要在两块显示屏上分别显示不同的内容。现有技术中,双屏双触控的智能终端通常在主屏(displayId=0)上显示APP并且处理一些复杂的操作,而在副屏(displayId=1)上投射或显示一幅背景图片(类似键盘)辅助主屏来做一些简单的操作。该技术方案中的副屏操作并未利用和结合Android系统原生支持多设备的框架显示APP,并需要耗费额外的内存和CPU资源、不能充分发挥副屏的作用。

技术实现要素:

为了解决现有技术存在的不足,本发明的目的在于提供一种在双屏智能终端上实现双APP同时运行的方法,可以自主控制系统的APP呈现在主屏或者副屏上,并且能够根据场景需求来动态切换显示区域。

为实现上述目的,本发明提供的在双屏智能终端上实现双APP同时运行的方法,包括以下步骤:

1)启动RecentsActivity,选择想要副屏显示的TaskView,并将其移动到指定区域;

2)在DockedMode中启动任务, 将stack id设置为DOCKED_STACK_ID,使得当前副屏的尺寸为堆栈大小;

3)从近期任务列表中启动Activity,创建DOCKED STACK;

4)启动activity,在副屏上显示activity;

5)选择要在主屏上现实的APP,启动activity,并在主屏显示Activity;

6)将APP在主屏和副屏之间相互切换。

进一步地,在所述步骤1)之前,还包括,将Android系统的配置文件的android:resizeableActivity属性配置为true,使其支持双APP同时运行的步骤。

进一步地,所述步骤2)是在副屏创建堆栈时,TaskStack.java文件中将当前副屏的尺寸设置为堆栈大小,并在设置显示在主屏的activity的堆栈尺寸时,将其设置为主屏的大小。

进一步地,所述步骤3)包括,

副屏创建堆栈时,在ActivityStackSupervisor.java文件中对屏幕displayId进行设定,使APP显示在副屏上;

副屏创建好堆栈后,在ActivityStack.java文件中将其设置为具有获得焦点的能力。

更进一步地,所述步骤4)包括,启动activity时,设置ActivityStater.java文件,获取intent中stack id,并将activity设置在副屏的堆栈中。

本发明提供的在双屏智能终端上实现双APP同时运行的方法,在遵从系统标准的应用启动与显示框架的前提下,令系统可以同时运行两个APP,并且能够在双屏之间动态切换。对窗口管理机制中的WindowManagerService类和TaskStack类,以及Activity管理机制的ActivityStackSupervisor类和ActivityStack的修改,将大大提升APP在两块屏幕上的呈现效果和用户体验。同时,对于应用市场上的第三方APP,实现双APP适配只要在AndroidManifest文件中设置android:resizeableActivity为true即可,定制成本极低。另外,由于该方案属于系统框架(Framework)纯软件层面的修改,故无需考虑底层硬件的差异,具备一定的通用性。

本发明完全遵从系统标准应用启动显示框架,保证系统运行中的稳定性,在不增加任何系统资源消耗的前提下,使副屏能够获得与主屏相同显示APP的功能。同时,对于应用市场上的第三方APP,实现双APP适配只需要增加对应属性即可,定制成本极低。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:

图1为根据本发明的在双屏智能终端上实现双APP同时运行的方法流程图;

图2为TaskStack.java文件中添加的代码示意图;

图3为根据本发明的在ActivityStackSupervisor.java文件中添加代码示意图;

图4为根据本发明的在ActivityStack.java文件中添加代码示意图;

图5为根据本发明的在ActivityStater.java文件中添加代码示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1为根据本发明的在双屏智能终端上实现双APP同时运行的方法流程图,下面将参考图1,对本发明的在双屏智能终端上实现双APP同时运行的方法进行详细描述。

首先,在步骤101,将Android系统的配置文件AndroidManifest的android:resizeableActivity属性配置为true,使Android系统支持双APP同时运行。

在步骤102,启动RecentsActivity,并选择想要副屏显示的TaskView。

在步骤103,判断Android系统是否支持双APP同时运行,如果不支持双APP同时运行,则提示用户,结束;否则进行下一步骤。

在步骤104,将TaskView移动到指定区域,在该步骤中,Android系统提示用户将选择的TaskView移动到指定区域,用户根据该提示将TaskView拖拽到指定区域。

在步骤105,Android系统接收用户的指令,在DockedMode中启动任务(startTaskInDockedMode)。

在步骤106,将stack id设置为DOCKED_STACK_ID,使得当前副屏的尺寸为stack的大小。

在Android系统中窗口管理者不仅仅只对窗口进行管理,同时还要与Activity管理者进行交互,而在副屏创建stack时就需要窗口管理者将当前副屏的尺寸设置为stack的大小。图2为根据本发明的TaskStack.java文件中添加的代码示意图,如图2所示,在TaskStack.java文件中添加如下代码,该代码的主要修改内容为判断此时是否处于双APP模式,如果处于双APP模式并且要在副屏显示App,即可将当前副屏的尺寸设置为stack的大小。

在设置显示在主屏的activity的stack尺寸时,将其设置为主屏的大小。

在步骤107,从近期任务列表(recents)中启动Activity,创建DOCKED STACK。创建DOCKED STACK时,对屏幕displayId进行重新设定,使APP显示在副屏上。

APP的堆栈管理者ActivityStackSupervisor是为了许多 Activity协同工作而不至于产生混乱,Android平台设计了一种堆栈机制用于管理Activity,它的目标是在应用启动时为其获取或者创建对应的stack(堆栈),默认情况下APP都是在主屏创建stack从而显示在主屏。通过定义getStackInEpd函数来替代标准的获取stack接口,可在创建stack时对屏幕displayId进行重新设定。图3为根据本发明的在ActivityStackSupervisor.java文件中添加代码示意图,如图3所示,在ActivityStackSupervisor.java文件中添加如下代码,该代码首先获取设备的数量,如果有副屏直接获取副屏中所有的stack,如果需要创建的stack已经存在副屏中就直接将其返回,否则调用createStackOnDisplay指定在副屏上创建stack并返回,使APP显示在副屏上。

由于在默认情况下只有主屏的stack具有获取焦点的能力,因此在副屏创建好stack后,需要让其具有获得焦点的能力。图4为根据本发明的在ActivityStack.java文件中添加代码示意图,如图4所示,在ActivityStack.java文件中添加如下代码,该代码主要修改内容为增加判断条件,当stack id为双APP模式并且app在副屏显示,也要使stack具有获得焦点的能力。

在步骤108,启动activity,在副屏上显示activity,实现在副屏上运行用户选择的APP。

由于Android默认从APP中启动的activity都会在主屏上显示,先在应用内部启动多个activity是非常常见的,所以在该步骤中,需要对应用进行适配。当在应用内部启动activity时,只需要获得当前APP保存在需要启动Activity的intent中的stack id,framework层获取信息,将该activity设置在副屏的stack中即可。图5为根据本发明的在ActivityStater.java文件中添加代码示意图,如图5所示,所示,在ActivityStater.java文件中添加如下代码。该代码在启动新的activity时调用,为新的activity设置目标stack,如果新的activity是从副屏启动的并且此时系统也处于双APP模式,就将副屏stack重新赋值给目标stack。

在步骤109,选择在主屏上显示的APP。

在步骤110,启动Activity,在主屏显示Activity,实现在主屏上运行用户选择的APP。

在步骤111使APP在主屏和副屏之间切换。如果要实现App在主屏与副屏之间的切换,只需要先选择一个APP在副屏显示,再选择另外一个APP在主屏显示,然后退出双APP模式将之前在主屏显示的APP选择在副屏显示,之前在副屏显示的在主屏显示,这样就可以轻松实现APP在主屏与副屏之间的切换。

本发明的在双屏智能终端上实现双APP同时运行的方法,在遵从系统标准的应用启动与显示框架的前提下,令系统可以同时运行两个APP,并且能够在双屏之间动态切换。对窗口管理机制中的WindowManagerService类和TaskStack类,以及Activity管理机制的ActivityStackSupervisor类和ActivityStack的修改,将大大提升APP在两块屏幕上的呈现效果和用户体验。同时,对于应用市场上的第三方APP,实现双APP适配只要在AndroidManifest文件中设置android:resizeableActivity为true即可,定制成本极低。

本发明的在双屏智能终端上实现双APP同时运行的方法,可以应用于任何android系统的双屏智能终端上,其中,android系统的双屏智能终端,不限于双屏智能手机、平板电脑等。

本发明的在双屏智能终端上实现双APP同时运行的方法,设计时充分考虑了如下几个方面:

第一方面,由于activity管理框架中只支持app显示在默认主屏上,必须使用特殊处理让其能够显示在不同屏幕的能力。

第二方面, Android系统的窗口管理服务(WindowManagerService)根据APP显示在不同的屏幕上,对其APP显示的尺寸根据屏幕进行适配。需要综合评估这些特殊处理对副屏显示APP效果的影响,进而予以适当的屏蔽和修改,并且充分考虑其运行稳定性。

第三方面,由于Android默认从APP中启动的activity都会在主屏上显示,所以从副屏中显示的APP启动一个activity仍然会在主屏中显示,需要对从副屏启动的activity进行处理。

第四方面,由于需要对应用启动流程,显示流程进行修改,并且双APP在两个屏幕间切换,需要充分考虑系统的稳定性。

本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

你可能感兴趣的:(android在副屏中运行一个应用_一种在双屏智能终端上实现双APP同时运行的方法与流程...)