Base class for presentations.
A presentation is a special kind of dialog whose purpose is to present
content on a secondary display. A {@link Presentation} is associated with
the target {@link Display} at creation time and configures its context and
resource configuration according to the display's metrics.
Notably, the {@link Context} of a presentation is different from the context
of its containing {@link Activity}. It is important to inflate the layout
of a presentation and load other resources using the presentation's own context
to ensure that assets of the correct size and density for the target display
are loaded.
A presentation is automatically canceled (see {@link Dialog#cancel()}) when
the display to which it is attached is removed. An activity should take
care of pausing and resuming whatever content is playing within the presentation
whenever the activity itself is paused or resumed.
Choosing a presentation display
Before showing a {@link Presentation} it's important to choose the {@link Display}
on which it will appear. Choosing a presentation display is sometimes difficult
because there may be multiple displays attached. Rather than trying to guess
which display is best, an application should let the system choose a suitable
presentation display.
There are two main ways to choose a {@link Display}.
Using the media router to choose a presentation display
The easiest way to choose a presentation display is to use the
{@link android.media.MediaRouter MediaRouter} API. The media router service keeps
track of which audio and video routes are available on the system.
The media router sends notifications whenever routes are selected or unselected
or when the preferred presentation display of a route changes.
So an application can simply watch for these notifications and show or dismiss
a presentation on the preferred presentation display automatically.
The preferred presentation display is the display that the media router recommends
that the application should use if it wants to show content on the secondary display.
Sometimes there may not be a preferred presentation display in which
case the application should show its content locally without using a presentation.
Here's how to use the media router to create and show a presentation on the preferred
presentation display using {@link android.media.MediaRouter.RouteInfo#getPresentationDisplay()}.
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();
}
}
The following sample code from ApiDemos demonstrates how to use the media
router to automatically switch between showing content in the main activity and showing
the content in a presentation when a presentation display is available.
{@sample development/samples/ApiDemos/src/com/example/android/apis/app/PresentationWithMediaRouterActivity.java
activity}
Using the display manager to choose a presentation display
Another way to choose a presentation display is to use the {@link DisplayManager} API
directly. The display manager service provides functions to enumerate and describe all
displays that are attached to the system including displays that may be used
for presentations.
The display manager keeps track of all displays in the system. However, not all
displays are appropriate for showing presentations. For example, if an activity
attempted to show a presentation on the main display it might obscure its own content
(it's like opening a dialog on top of your activity).
Here's how to identify suitable displays for showing presentations using
{@link DisplayManager#getDisplays(String)} and the
{@link DisplayManager#DISPLAY_CATEGORY_PRESENTATION} category.
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();
}
The following sample code from ApiDemos demonstrates how to use the display
manager to enumerate displays and show content on multiple presentation displays
simultaneously.
{@sample development/samples/ApiDemos/src/com/example/android/apis/app/PresentationActivity.java
activity} |