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 ,启动对话框并将其显示在屏幕上。

参考自谷歌官方

posted @ 2021-11-12 11:15  RichardLM  阅读(2464)  评论(0编辑  收藏  举报