Android Presentation多屏显示
Android Presentation
一、介绍
Presentation是一种特殊的dialog,其目的是在辅助显示器上展示内容。 Presentation在创建时与目标Display相关联,并根据 display 的指标配置其上下文和资源配置。当Presentation附加到的显示器被移除时,演示文稿将自动取消。 每当活动本身暂停或恢复时,活动都应注意暂停和恢复演示文稿中正在播放的任何内容。
二、使用
1、选择display
在显示Presentation之前,重要的是选择它将出现的Display 。 选择演示显示器有时很困难,因为可能会连接多个显示器。 应用程序应该让系统选择合适的演示显示,而不是试图猜测哪个显示是最好的。
选择Display有两种主要方法。
一、使用MediaRouter选择演示显示
媒体路由器服务会跟踪系统上可用的音频和视频路由。 无论何时选择或取消选择路线,或者当路线的首选显示更改时,媒体路由器都会发送通知。 因此,应用程序可以简单地观察这些通知,并自动在首选演示显示上显示或关闭演示。
MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute();
if (route != null) {
Display presentationDisplay = route.getPresentationDisplay();
if (presentationDisplay != null) {
Presentation presentation = new MyPresentation(context, presentationDisplay);
presentation.show();
}
}
二、使用DisplayManager选择演示显示
显示管理器服务提供枚举和描述连接到系统的所有显示的功能,包括可用于演示的显示。
显示管理器跟踪系统中的所有显示。 但是,并非所有显示器都适合显示演示文稿。 例如,如果一个 Activity 试图在主显示器上显示一个演示文稿,它可能会掩盖它自己的内容(就像在你的 Activity 顶部打开一个对话框一样)。
以下是如何使用DisplayManager.getDisplays(String)和DisplayManager.DISPLAY_CATEGORY_PRESENTATION类别来识别适合显示演示文稿的显示器。
DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
Display[] presentationDisplays = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
if (presentationDisplays.length > 0) {
// If there is more than one suitable presentation display, then we could consider
// giving the user a choice. For this example, we simply choose the first display
// which is the one the system recommends as the preferred presentation display.
Display display = presentationDisplays[0];
Presentation presentation = new MyPresentation(context, presentationDisplay);
presentation.show();
}
2、自定义演示布局
public class TestPresentation extends android.app.Presentation {
//使用默认主题创建附加到指定显示的新演示文稿
public TestPresentation(Context context, Display display) {
super(context, display);
}
//使用可选的指定主题创建附加到指定显示的新演示文稿
public TestPresentation(Context context,Display display,int theme){
super(context,display,theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//自设布局
setContentView(R.layout.presentation_test);
}
}
三、方法
1、构造方法
//使用默认主题创建附加到指定显示的新演示文稿
Presentation(Context context, Display display) {
super(context, display);
}
//使用可选的指定主题创建附加到指定显示的新演示文稿
Presentation(Context context,Display display,int theme){
super(context,display,theme);
}
参数:
Context:显示演示文稿的应用程序的上下文。 演示文稿将根据此上下文和有关关联显示的信息创建自己的上下文;
Display:演示文稿应附加到的显示器;
theme:描述用于窗口的主题的样式资源。如果为 0,则将使用默认演示主题。
2、公共方法
getDisplay()
获取Display此演示文稿的Display 。
getResources()
获取应用于扩展此演示文稿的布局的Resources 。 此资源对象已根据演示文稿出现的显示器的指标进行配置。
onDisplayChanged()
当演示文稿附加到的Display的属性发生更改时,由系统调用。
onDisplayRemoved()
当Display附加到的Display被移除时由系统调用。
show()
继承自Dialog.show ,启动对话框并将其显示在屏幕上。
参考自谷歌官方