Presentations From a Service
For a while now, I have been saying that the only way to use the Presentation
class to display stuff on a TV/monitor/projector is through an Activity
, because
Presentation
inherits from Dialog
. That is true.
Sometimes, I would say that the only way to display stuff on a TV/monitor/projector
is through an Activity
. That, as it turns out, is not true.
One Stack Overflow answer
led to
my own Stack Overflow question
on the subject, and with the help of those SO contributors I eventually figured
out how to drive an external display without an Activity
.
I wrapped that pattern up into a PresentationService
that I have added to
my CWAC-Presentation library.
PresentationService
clones some of the logic from Presentation
and Dialog
, enough
to allow you to define a View
that will be shown on a Window
connected to the
Display
object representing the external display.
The biggest limitation is that we have to use a TYPE_SYSTEM_ALERT
Window
, which
in turn requires the SYSTEM_ALERT_WINDOW
permission. This is a permission that I really
try to avoid, both as a developer and as a user. Ostensibly, it is there because otherwise
a Service
could draw over the main display without the user being aware of it. Perhaps
in the future, a Service
rendering to an external display might be able to avoid this permission or
switch to some alternate, less-scary permission.
I hope to cover the implementation of PresentationService
in the next update to
my book. If you simply want to use it, the project README
contains
basic instructions
for using it, and there is a dedicated sample project
showing how to use it.