Android异显开发概述
目前存在有些Android设备(比如收银机)存在多个屏幕,不同的屏幕显示不同的内容,这种场景就称做Android多屏异显。Android从4.2开始支持双屏异显,主要基于AndroidSDK提供的API,使用Presentation类,将一个APP的相关内容显示到指定的屏幕上。
Presentation
Presentation是一个特殊的dialog,它的目的是显示内容到第二屏幕。在Presentation创建的时候关联一个目标设备,确定Presentation要显示在那个设备上,根据这个设备的信息来配置Presentation的context和resources信息。
Presentation的context与包含它的Activity的context是不相同的,用presentation的上下文来填充一个presentation的layout和加载其它的资源是非常重要的,可以确保我们加载的目标设备正确的尺寸密度assets。
当Presentation附属的display被移除的话,Presentation就会自动被取消。当创建Presentation的Activity自己处于paused或者resumed,无论Presentation在显示什么内容,该Activity就要关心对Presentation 进行pausing and resuming
1 | public class Presentation extends Dialog { |
从源码上看,Presentation继承Dialog,Presentation是一个特殊的Dialog, 其有两个构造方法,必要的参数有两个,一个是Context, 一个是Display。Context是其依附于其初始化的Activity的上下文,Display为该Presentation需要显示的屏幕。Display如果获取呢?
获取设备上的屏幕
1 | DisplayManager mDisplayManager;//屏幕管理类 |
displays 是一个数组,一般情况是数组第0个为主屏,第1个开始为副屏。所以初始化Presentation使用的Display参数就需要取displays[1]。
在副屏上展示内容
通过Presentation来实现,Presentation继承了Dialog。假设我们写了一个DifferentDislay的类,这个类是要继承
1 | privateclass DifferentDislay extends Presentation{ |
开启副屏
1 | //context用getApplicationContext在点击home键时只要程序还在后台副屏就还显示,displays[1]是副屏 |
存在的问题
- Presentation依赖Activity的生命周期