SlideShare a Scribd company logo
1 of 27
Download to read offline
Adding multi-screen support to Android* Applicationsusing the Presentation API 
Xavier Hallade, Developer Evangelist, Intel Corporation 
ph0b.com -@ph0b
2 
Android Multi-Screen support 
Miracast 
ChromecastMirroring 
Micro-HDMI 
MHL/Slimport 
Wireless 
Yes 
Yes 
No 
No 
Charges your device 
No 
No 
No 
Yes 
Requiresexisting WiFi 
No 
Yes 
No 
No 
Directcommunication 
Yes 
Yes (withTDLS) 
Yes 
Yes 
Latency 
Low-Med 
Medium 
None 
None 
Number of Supported devices 
Most Android4.2+ devices 
13, more coming 
? 
? 
Since version 4.2, Android supports the Presentation API that allows developers to manipulate the content displayed on additional screens.
3 
Connecting a screen to your device 
Chromecast Mirroring 
Miracast 
Developer Settings
4 
Clone Mode (Default) 
After establishing the connection, user sees local screen on the remote display 
Resolution sent to remote is the same as local display’s 
No need to do anything to support this mode
5 
Extended Video Mode(Intel®Platform Specific) 
Video mode is activated automatically when user plays a video using Android* Media Player framework (ex: VideoView) 
User sees video content on the remote at the 1080p resolution (or whatever the native resolution of the content is) 
Local video rendering is turned off to save power, but UI stays untouched
6 
Dual Screen Display With Single App 
Remote screen used for content viewing 
Local screen used for control & context info 
Application can target this mode using the Android*Presentation API
7 
Dual Screen Display With Background Service 
User can navigate out of the app and play 1080p video on local screen or use any other application, including receiving a phone call without any disruption to background playback
8 
Connecting a Wireless Display on Android* 
Sony* XperiaZ 
Stock/Intel® 
Samsung* Galaxy S4
9 
Miracast* Concept 
Video Render 
Audio Render 
VideoDecode 
AudioDecode 
De-Packetize 
De-Packetize 
Link Content Protection Decrypt (Optional) 
AV DeMux 
Transport 
LLC 
WI-FiMAC (Direct Link) 
Wi-Fi PHY 
SINK 
VideoEncode 
AudioEncode 
Packetize 
Packetize 
Link Content Protection Encrypt (Optional) 
AV Mux 
Transport 
LLC 
WI-FiMAC (Direct Link) 
Wi-Fi PHY 
Video Frames 
Audio Samples 
SOURCE
10 
Adapters 
•Actiontec*ScreenBeamPro 
•Actiontec*ScreenBeamMini 2 
•Netgear*(ex: PTV3000) 
•Viewsonic(WPG-370) 
•Best Buy*Rocketfish* 
•Lenovo* 
•… 
Projectors 
•Dell* 
•Seiko Epson * 
•Ricoh* 
•LG* 
•… 
TVs 
•Samsung* 
•Toshiba* 
•LG* 
•TCL* 
•Sharp* 
•Philips* 
•… 
Miracast*Certified Sink Devices 
Full list of Miracast* certified devices can be found at 
http://www.wi-fi.org/wi-fi-certified-miracast 
Intel®WiDi Certified 
MiBox
11 
Second-Screen Enabled Devices running Android* 4.2.x 
Device 
Miracast* Certified 
HDMI*, MHL* or SlimPort* 
Samsung* Galaxy S4 
Yes 
Yes 
Samsung Galaxy Tab3 10.1 
No 
Yes 
Sony* XperiaZ 
Yes 
Yes 
LG* OptimusG 
Yes 
Yes 
Nexus* 4, 5, 7 (2013) 
Yes 
Yes 
HTC* One 
Yes 
Yes 
… Most Android 4.2+ devices 
Yes
12 
Android* Secondary Display API 
Android added Second-Screen support via the Presentation class in Android* 4.2 (API Level 17), allowing you to: 
Implement support for a second screen in your applications without having to worry about the way the displays are connected (Display agnostic) 
Works with MHL*, HDMI*, SlimPort*, Miracast* & Chromecast Mirroring* compatible devices 
You can control the output on the remote (second) screen independently of the phone screen
13 
The Presentation Object 
Dialog 
Presentation 
You need to have a fragment based navigation if you want to keep it running while navigating in the app. 
The activity should take care of pausing and resuming whatever content is playing within the presentation whenever the activity itself is paused or resumed. 
•Presentation is the based class and should be extended: 
•Presentation inherits from Dialog, and as for a Dialog its lifecycle is bound to an Activity 
public class DemoPresentation extendsPresentation { 
•Needs to be associated with a Display at creation time
14 
Using the Presentation API 
Before showing a Presentation you need to select a Display, this can be done in 2 ways: 
1.MediaRouterAPI (in API 16): system will decide the best display for you! 
also available in the Support Library v7* 
2.Display Manager API (in API 17): Enumeration of displays 
// Get the MediaRouterservice 
MediaRouter mMediaRouter= (MediaRouter)getSystemService(Context.MEDIA_ROUTER_SERVICE); 
// Care only about routes that have full video support. 
MediaRouter.RouteInfomRouteInfo = mMediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO); 
Display presentationDisplay= mRouteInfo.getPresentationDisplay(); 
// Get the DisplayManagerservice. 
DisplayManagermDisplayManager= (DisplayManager)getSystemService(Context.DISPLAY_SERVICE); 
// enumerate the displays 
Display[] presentationDisplays= mDisplayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
15 
Presentation API 
MediaRouter. getSelectedRoute(ROUTE_TYPE_LIVE_VIDEO) 
MediaRouter. routeInfo 
getPresentationDisplay() 
new Presentation(activityContext, display) 
.show() 
Then, using MediaRouter.addCallback, you have to monitor: 
•onRouteUnselected 
•onRouteSelected 
•onRoutePresentationDisplayChanged 
How to get a Presentation displayed: 
And inside the activity owning the Presentation: 
•onResume 
•onPause
16 
Designing Layout for the Presentation 
Use a layout the same way as with a Dialog. 
Display properties are the same than with Google*TV: 
TV display is as bigger from a phone than the user sits further from a phone: screen density is comparable. 
Default theme is HoloDark: light text on dark background is easier to read on TV. 
Orientation is always… landscape! 
TV setting 
Addressable screen size 
Density Identifier 
Screen Density 
Display Resolution 
Screen size identifier 
720p 
1280 x 720 px 
tvdpi 
213 dp 
960 x 540 dp 
large 
1080p 
1920 x 1080 px 
xhdpi 
320 dp 
960 x 540 dp 
large 
source: https://developers.google.com/tv/android/docs/gtv_android_patterns
17 
Second-ScreenDemo
18 
Intel®WiDi –Dual Screen Possibilities 97 MPH 4 POS107 MPH 8 POS111 MPH 14 POSLIVE FEEDTURN 7 
App Window #1 
Configure and add select content 
on 2’ screen 
App Window #2 
View multi-angle 
Videos & more on 
10’ large screen 
Multi-video 
User configured 
Application 
EXTREME 
Content 
Driver #48-Car Cam 
Driver #10 – 
Fol ow the Car 
Track Cam 
Location 
Car Race Main Live Feed 
Driver#8-Car Cam 
Driver#99-Car Cam 
Tweet Feeds…. 
Layout 1 
Layout 4 
Layout 3 
Layout 2 
MPH / POS 
MPH / POS 
MPH //POS 
Clear All 
Follow Driver 
Driver 
Tweets 
Driver Stats 
Live Feed 
Driver 
Location 
Load Layout 
Save Layout 
THERACE 
One application, pulling content from one site, driving two screens!
19 
Ideas for Dual Screen Applications 
Enter search term 
Touchpad Mode 
Web Browser
20 
Ideas for Dual Screen Applications 
And 
Keyboard Input Mode 
w 
q 
e 
r 
t 
y 
u 
i 
o 
p 
s 
a 
d 
f 
g 
h 
j 
k 
l 
z 
 
x 
c 
v 
b 
n 
m 
&123 
/ 
space 
· 
search 
And 
Web Browser
21 
Ideas for Dual Screen Applications 
Games 
Dual Joysticks Mode
22 
Ideas for Dual Screen Applications 
Productivity App
23 
Ideas for Dual Screen Applications 
Current matches 
X vs. Y 
A vs. B 
X vs. Z 
Add Score 
11 
Player X vs. Player Z 
7 
Tournament Manager
25 
Wifi Display APIs -Android* 4.2/4.3 
All of the below APIs are internal as of Android* 4.2/4.3 
They are part of AOSP and publicly exposed, but not part of the framework so are not guaranteed to work 
android.hardware.display.DisplayManager 
… 
String ACTION_WIFI_DISPLAY_STATUS_CHANGED 
WifiDisplayStatusgetWifiDisplayStatus() 
void scanWifiDisplays() 
void connectWifiDisplay(StringdeviceAdress)¹ 
void disconnectWifiDisplay()² 
void forgetWifiDisplay(Stringaddress)² 
void renameWifiDisplay(String address,Stringalias)² 
android.hardware.display. 
WifiDisplayStatus 
intgetFeatureState() 
intgetScanState() 
intgetActiveDisplayState() 
WifiDisplaygetActiveDisplay() 
WifiDisplay[] getAvailableDisplays() 
WifiDisplay[] getRememberedDisplays() 
android.hardware.display.WifiDisplay 
StringgetDeviceAddress() 
String getDeviceName() 
String getDeviceAlias() 
String getFriendlyDisplayName() 
android.provider.Settings 
… 
String ACTION_WIFI_DISPLAY_SETTINGS 
String getDeviceAlias() 
String getFriendlyDisplayName() 
¹android.permission.CONFIGURE_WIFI_DISPLAY required for unknown devices 
²android.permission.CONFIGURE_WIFI_DISPLAY always required
26 
Adding a MediaRouteButton 
In res/menu/default.xml: <item android:title="Media Route Settings" android:actionProviderClass="android.app.MediaRouteActionProvider" android:showAsAction="always" /> //Sets Media Route Button to second screen mode 
mediaRouteActionProvider.setRouteTypes(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
27 
Some last comments 
Presentation from background service: 
•“Draw over apps” permission (SYSTEM_ALERT_WINDOW) 
•TYPE_SYSTEM_ALERTLayoutParam. 
USB Input Back Channel 
HTML5 : 
•standard: http://webscreens.github.io/presentation-api/ 
•Demo implementation in HexGLbuilt with crosswalk: https://github.com/hmin/HexGL 
•documentation: https://github.com/crosswalk-project/crosswalk- website/wiki/presentation-api-manual
Q&A

More Related Content

What's hot

Introduction to Android development - Presentation Report
Introduction to Android development - Presentation ReportIntroduction to Android development - Presentation Report
Introduction to Android development - Presentation ReportAtul Panjwani
 
LAFS SVI Level 3 - Game Design and Analysis
LAFS SVI Level 3 - Game Design and AnalysisLAFS SVI Level 3 - Game Design and Analysis
LAFS SVI Level 3 - Game Design and AnalysisDavid Mullich
 
MediaPlayer Playing Flow
MediaPlayer Playing FlowMediaPlayer Playing Flow
MediaPlayer Playing FlowJavid Hsu
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveBin Chen
 
Android's Multimedia Framework
Android's Multimedia FrameworkAndroid's Multimedia Framework
Android's Multimedia FrameworkOpersys inc.
 
Introduction to Level Design
Introduction to Level DesignIntroduction to Level Design
Introduction to Level DesignRico Lemba
 
Mobile Application Development Unit 1.pptx
Mobile Application Development Unit 1.pptxMobile Application Development Unit 1.pptx
Mobile Application Development Unit 1.pptxnihitagrawal4
 
Reusing your existing software on Android
Reusing your existing software on AndroidReusing your existing software on Android
Reusing your existing software on AndroidTetsuyuki Kobayashi
 
Android Web app
Android Web app Android Web app
Android Web app Sumit Kumar
 
[Android] Multimedia Programming
[Android] Multimedia Programming[Android] Multimedia Programming
[Android] Multimedia ProgrammingNikmesoft Ltd
 
Android - Application Framework
Android - Application FrameworkAndroid - Application Framework
Android - Application FrameworkYong Heui Cho
 
Android HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacyAndroid HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacyJollen Chen
 

What's hot (20)

Introduction to Android development - Presentation Report
Introduction to Android development - Presentation ReportIntroduction to Android development - Presentation Report
Introduction to Android development - Presentation Report
 
LAFS SVI Level 3 - Game Design and Analysis
LAFS SVI Level 3 - Game Design and AnalysisLAFS SVI Level 3 - Game Design and Analysis
LAFS SVI Level 3 - Game Design and Analysis
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
MediaPlayer Playing Flow
MediaPlayer Playing FlowMediaPlayer Playing Flow
MediaPlayer Playing Flow
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
 
Embedded Android : System Development - Part II (HAL)
Embedded Android : System Development - Part II (HAL)Embedded Android : System Development - Part II (HAL)
Embedded Android : System Development - Part II (HAL)
 
Binder: Android IPC
Binder: Android IPCBinder: Android IPC
Binder: Android IPC
 
Android's Multimedia Framework
Android's Multimedia FrameworkAndroid's Multimedia Framework
Android's Multimedia Framework
 
Embedded Android : System Development - Part I
Embedded Android : System Development - Part IEmbedded Android : System Development - Part I
Embedded Android : System Development - Part I
 
Android Audio System
Android Audio SystemAndroid Audio System
Android Audio System
 
Introduction to Level Design
Introduction to Level DesignIntroduction to Level Design
Introduction to Level Design
 
Embedded Android : System Development - Part IV
Embedded Android : System Development - Part IVEmbedded Android : System Development - Part IV
Embedded Android : System Development - Part IV
 
Mobile Application Development Unit 1.pptx
Mobile Application Development Unit 1.pptxMobile Application Development Unit 1.pptx
Mobile Application Development Unit 1.pptx
 
Deep Dive into the AOSP
Deep Dive into the AOSPDeep Dive into the AOSP
Deep Dive into the AOSP
 
Reusing your existing software on Android
Reusing your existing software on AndroidReusing your existing software on Android
Reusing your existing software on Android
 
Android Web app
Android Web app Android Web app
Android Web app
 
Android IPC Mechanism
Android IPC MechanismAndroid IPC Mechanism
Android IPC Mechanism
 
[Android] Multimedia Programming
[Android] Multimedia Programming[Android] Multimedia Programming
[Android] Multimedia Programming
 
Android - Application Framework
Android - Application FrameworkAndroid - Application Framework
Android - Application Framework
 
Android HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacyAndroid HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacy
 

Similar to Using the Presentation API and external screens on Android

Android Meetup, Илья Лёвин
Android Meetup, Илья ЛёвинAndroid Meetup, Илья Лёвин
Android Meetup, Илья ЛёвинGDG Saint Petersburg
 
HTC Developer - 2012
HTC Developer - 2012HTC Developer - 2012
HTC Developer - 2012Bruce Jones
 
Flash platform fitc
Flash platform fitcFlash platform fitc
Flash platform fitcMark Doherty
 
Windows phone 8 overview
Windows phone 8 overviewWindows phone 8 overview
Windows phone 8 overviewcodeblock
 
Optimizing your Android App for Mass Market Devices
Optimizing your Android App for Mass Market DevicesOptimizing your Android App for Mass Market Devices
Optimizing your Android App for Mass Market DevicesMotorola Mobility - MOTODEV
 
Android Live Streaming Box Technical
Android Live Streaming Box Technical Android Live Streaming Box Technical
Android Live Streaming Box Technical Jimmin Kurichiyil
 
Droidcon2013 miracast final2
Droidcon2013 miracast final2Droidcon2013 miracast final2
Droidcon2013 miracast final2Droidcon Berlin
 
Embedded Android Real-Time Streaming Optimization
Embedded Android Real-Time Streaming OptimizationEmbedded Android Real-Time Streaming Optimization
Embedded Android Real-Time Streaming OptimizationVIA Embedded
 
Chrysler Smart Screen
Chrysler Smart ScreenChrysler Smart Screen
Chrysler Smart ScreenMostafa Sameh
 
Hybrid App Development with PhoneGap
Hybrid App Development with PhoneGapHybrid App Development with PhoneGap
Hybrid App Development with PhoneGapDotitude
 
Adc2012 windows phone 8
Adc2012 windows phone 8Adc2012 windows phone 8
Adc2012 windows phone 8AlexanderGoetz
 
Windows Phone 8 Advanced Developers Conference
Windows Phone 8 Advanced Developers ConferenceWindows Phone 8 Advanced Developers Conference
Windows Phone 8 Advanced Developers ConferenceDamir Dobric
 
EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...
EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...
EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...Pietro F. Maggi
 
Getting started with android dev and test perspective
Getting started with android   dev and test perspectiveGetting started with android   dev and test perspective
Getting started with android dev and test perspectiveGunjan Kumar
 
I phone app develoment ppt
I phone app develoment   pptI phone app develoment   ppt
I phone app develoment pptsagaroceanic11
 
I phone app develoment ppt
I phone app develoment   pptI phone app develoment   ppt
I phone app develoment pptsagaroceanic11
 
Creating Flash Content for Multiple Screens
Creating Flash Content for Multiple ScreensCreating Flash Content for Multiple Screens
Creating Flash Content for Multiple Screenspaultrani
 
Manish Chasta - Securing Android Applications
Manish Chasta - Securing Android ApplicationsManish Chasta - Securing Android Applications
Manish Chasta - Securing Android ApplicationsPositive Hack Days
 

Similar to Using the Presentation API and external screens on Android (20)

Android Meetup, Илья Лёвин
Android Meetup, Илья ЛёвинAndroid Meetup, Илья Лёвин
Android Meetup, Илья Лёвин
 
HTC Developer - 2012
HTC Developer - 2012HTC Developer - 2012
HTC Developer - 2012
 
Flash platform fitc
Flash platform fitcFlash platform fitc
Flash platform fitc
 
Windows phone 8 overview
Windows phone 8 overviewWindows phone 8 overview
Windows phone 8 overview
 
Sandeep_Resume
Sandeep_ResumeSandeep_Resume
Sandeep_Resume
 
Optimizing your Android App for Mass Market Devices
Optimizing your Android App for Mass Market DevicesOptimizing your Android App for Mass Market Devices
Optimizing your Android App for Mass Market Devices
 
Android Live Streaming Box Technical
Android Live Streaming Box Technical Android Live Streaming Box Technical
Android Live Streaming Box Technical
 
Droidcon2013 miracast final2
Droidcon2013 miracast final2Droidcon2013 miracast final2
Droidcon2013 miracast final2
 
Embedded Android Real-Time Streaming Optimization
Embedded Android Real-Time Streaming OptimizationEmbedded Android Real-Time Streaming Optimization
Embedded Android Real-Time Streaming Optimization
 
Chrysler Smart Screen
Chrysler Smart ScreenChrysler Smart Screen
Chrysler Smart Screen
 
Google tv
Google tvGoogle tv
Google tv
 
Hybrid App Development with PhoneGap
Hybrid App Development with PhoneGapHybrid App Development with PhoneGap
Hybrid App Development with PhoneGap
 
Adc2012 windows phone 8
Adc2012 windows phone 8Adc2012 windows phone 8
Adc2012 windows phone 8
 
Windows Phone 8 Advanced Developers Conference
Windows Phone 8 Advanced Developers ConferenceWindows Phone 8 Advanced Developers Conference
Windows Phone 8 Advanced Developers Conference
 
EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...
EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...
EMEA AppForum 2015 Android KitKat & Lollipop - new features for enterprise de...
 
Getting started with android dev and test perspective
Getting started with android   dev and test perspectiveGetting started with android   dev and test perspective
Getting started with android dev and test perspective
 
I phone app develoment ppt
I phone app develoment   pptI phone app develoment   ppt
I phone app develoment ppt
 
I phone app develoment ppt
I phone app develoment   pptI phone app develoment   ppt
I phone app develoment ppt
 
Creating Flash Content for Multiple Screens
Creating Flash Content for Multiple ScreensCreating Flash Content for Multiple Screens
Creating Flash Content for Multiple Screens
 
Manish Chasta - Securing Android Applications
Manish Chasta - Securing Android ApplicationsManish Chasta - Securing Android Applications
Manish Chasta - Securing Android Applications
 

More from Xavier Hallade

BCON22: oneAPI backend - Blender Cycles on Intel GPUs
BCON22: oneAPI backend - Blender Cycles on Intel GPUsBCON22: oneAPI backend - Blender Cycles on Intel GPUs
BCON22: oneAPI backend - Blender Cycles on Intel GPUsXavier Hallade
 
Apps development for Recon HUDs
Apps development for Recon HUDsApps development for Recon HUDs
Apps development for Recon HUDsXavier Hallade
 
Etendre ses applications aux smartwatches et TVs android
Etendre ses applications aux smartwatches et TVs androidEtendre ses applications aux smartwatches et TVs android
Etendre ses applications aux smartwatches et TVs androidXavier Hallade
 
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginMastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginXavier Hallade
 
Power optimization for Android apps
Power optimization for Android appsPower optimization for Android apps
Power optimization for Android appsXavier Hallade
 
Getting your app on Android TV
Getting your app on Android TVGetting your app on Android TV
Getting your app on Android TVXavier Hallade
 
Android on IA devices and Intel Tools
Android on IA devices and Intel ToolsAndroid on IA devices and Intel Tools
Android on IA devices and Intel ToolsXavier Hallade
 

More from Xavier Hallade (7)

BCON22: oneAPI backend - Blender Cycles on Intel GPUs
BCON22: oneAPI backend - Blender Cycles on Intel GPUsBCON22: oneAPI backend - Blender Cycles on Intel GPUs
BCON22: oneAPI backend - Blender Cycles on Intel GPUs
 
Apps development for Recon HUDs
Apps development for Recon HUDsApps development for Recon HUDs
Apps development for Recon HUDs
 
Etendre ses applications aux smartwatches et TVs android
Etendre ses applications aux smartwatches et TVs androidEtendre ses applications aux smartwatches et TVs android
Etendre ses applications aux smartwatches et TVs android
 
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginMastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
 
Power optimization for Android apps
Power optimization for Android appsPower optimization for Android apps
Power optimization for Android apps
 
Getting your app on Android TV
Getting your app on Android TVGetting your app on Android TV
Getting your app on Android TV
 
Android on IA devices and Intel Tools
Android on IA devices and Intel ToolsAndroid on IA devices and Intel Tools
Android on IA devices and Intel Tools
 

Recently uploaded

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Recently uploaded (20)

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Using the Presentation API and external screens on Android

  • 1. Adding multi-screen support to Android* Applicationsusing the Presentation API Xavier Hallade, Developer Evangelist, Intel Corporation ph0b.com -@ph0b
  • 2. 2 Android Multi-Screen support Miracast ChromecastMirroring Micro-HDMI MHL/Slimport Wireless Yes Yes No No Charges your device No No No Yes Requiresexisting WiFi No Yes No No Directcommunication Yes Yes (withTDLS) Yes Yes Latency Low-Med Medium None None Number of Supported devices Most Android4.2+ devices 13, more coming ? ? Since version 4.2, Android supports the Presentation API that allows developers to manipulate the content displayed on additional screens.
  • 3. 3 Connecting a screen to your device Chromecast Mirroring Miracast Developer Settings
  • 4. 4 Clone Mode (Default) After establishing the connection, user sees local screen on the remote display Resolution sent to remote is the same as local display’s No need to do anything to support this mode
  • 5. 5 Extended Video Mode(Intel®Platform Specific) Video mode is activated automatically when user plays a video using Android* Media Player framework (ex: VideoView) User sees video content on the remote at the 1080p resolution (or whatever the native resolution of the content is) Local video rendering is turned off to save power, but UI stays untouched
  • 6. 6 Dual Screen Display With Single App Remote screen used for content viewing Local screen used for control & context info Application can target this mode using the Android*Presentation API
  • 7. 7 Dual Screen Display With Background Service User can navigate out of the app and play 1080p video on local screen or use any other application, including receiving a phone call without any disruption to background playback
  • 8. 8 Connecting a Wireless Display on Android* Sony* XperiaZ Stock/Intel® Samsung* Galaxy S4
  • 9. 9 Miracast* Concept Video Render Audio Render VideoDecode AudioDecode De-Packetize De-Packetize Link Content Protection Decrypt (Optional) AV DeMux Transport LLC WI-FiMAC (Direct Link) Wi-Fi PHY SINK VideoEncode AudioEncode Packetize Packetize Link Content Protection Encrypt (Optional) AV Mux Transport LLC WI-FiMAC (Direct Link) Wi-Fi PHY Video Frames Audio Samples SOURCE
  • 10. 10 Adapters •Actiontec*ScreenBeamPro •Actiontec*ScreenBeamMini 2 •Netgear*(ex: PTV3000) •Viewsonic(WPG-370) •Best Buy*Rocketfish* •Lenovo* •… Projectors •Dell* •Seiko Epson * •Ricoh* •LG* •… TVs •Samsung* •Toshiba* •LG* •TCL* •Sharp* •Philips* •… Miracast*Certified Sink Devices Full list of Miracast* certified devices can be found at http://www.wi-fi.org/wi-fi-certified-miracast Intel®WiDi Certified MiBox
  • 11. 11 Second-Screen Enabled Devices running Android* 4.2.x Device Miracast* Certified HDMI*, MHL* or SlimPort* Samsung* Galaxy S4 Yes Yes Samsung Galaxy Tab3 10.1 No Yes Sony* XperiaZ Yes Yes LG* OptimusG Yes Yes Nexus* 4, 5, 7 (2013) Yes Yes HTC* One Yes Yes … Most Android 4.2+ devices Yes
  • 12. 12 Android* Secondary Display API Android added Second-Screen support via the Presentation class in Android* 4.2 (API Level 17), allowing you to: Implement support for a second screen in your applications without having to worry about the way the displays are connected (Display agnostic) Works with MHL*, HDMI*, SlimPort*, Miracast* & Chromecast Mirroring* compatible devices You can control the output on the remote (second) screen independently of the phone screen
  • 13. 13 The Presentation Object Dialog Presentation You need to have a fragment based navigation if you want to keep it running while navigating in the app. The activity should take care of pausing and resuming whatever content is playing within the presentation whenever the activity itself is paused or resumed. •Presentation is the based class and should be extended: •Presentation inherits from Dialog, and as for a Dialog its lifecycle is bound to an Activity public class DemoPresentation extendsPresentation { •Needs to be associated with a Display at creation time
  • 14. 14 Using the Presentation API Before showing a Presentation you need to select a Display, this can be done in 2 ways: 1.MediaRouterAPI (in API 16): system will decide the best display for you! also available in the Support Library v7* 2.Display Manager API (in API 17): Enumeration of displays // Get the MediaRouterservice MediaRouter mMediaRouter= (MediaRouter)getSystemService(Context.MEDIA_ROUTER_SERVICE); // Care only about routes that have full video support. MediaRouter.RouteInfomRouteInfo = mMediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO); Display presentationDisplay= mRouteInfo.getPresentationDisplay(); // Get the DisplayManagerservice. DisplayManagermDisplayManager= (DisplayManager)getSystemService(Context.DISPLAY_SERVICE); // enumerate the displays Display[] presentationDisplays= mDisplayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
  • 15. 15 Presentation API MediaRouter. getSelectedRoute(ROUTE_TYPE_LIVE_VIDEO) MediaRouter. routeInfo getPresentationDisplay() new Presentation(activityContext, display) .show() Then, using MediaRouter.addCallback, you have to monitor: •onRouteUnselected •onRouteSelected •onRoutePresentationDisplayChanged How to get a Presentation displayed: And inside the activity owning the Presentation: •onResume •onPause
  • 16. 16 Designing Layout for the Presentation Use a layout the same way as with a Dialog. Display properties are the same than with Google*TV: TV display is as bigger from a phone than the user sits further from a phone: screen density is comparable. Default theme is HoloDark: light text on dark background is easier to read on TV. Orientation is always… landscape! TV setting Addressable screen size Density Identifier Screen Density Display Resolution Screen size identifier 720p 1280 x 720 px tvdpi 213 dp 960 x 540 dp large 1080p 1920 x 1080 px xhdpi 320 dp 960 x 540 dp large source: https://developers.google.com/tv/android/docs/gtv_android_patterns
  • 18. 18 Intel®WiDi –Dual Screen Possibilities 97 MPH 4 POS107 MPH 8 POS111 MPH 14 POSLIVE FEEDTURN 7 App Window #1 Configure and add select content on 2’ screen App Window #2 View multi-angle Videos & more on 10’ large screen Multi-video User configured Application EXTREME Content Driver #48-Car Cam Driver #10 – Fol ow the Car Track Cam Location Car Race Main Live Feed Driver#8-Car Cam Driver#99-Car Cam Tweet Feeds…. Layout 1 Layout 4 Layout 3 Layout 2 MPH / POS MPH / POS MPH //POS Clear All Follow Driver Driver Tweets Driver Stats Live Feed Driver Location Load Layout Save Layout THERACE One application, pulling content from one site, driving two screens!
  • 19. 19 Ideas for Dual Screen Applications Enter search term Touchpad Mode Web Browser
  • 20. 20 Ideas for Dual Screen Applications And Keyboard Input Mode w q e r t y u i o p s a d f g h j k l z  x c v b n m &123 / space · search And Web Browser
  • 21. 21 Ideas for Dual Screen Applications Games Dual Joysticks Mode
  • 22. 22 Ideas for Dual Screen Applications Productivity App
  • 23. 23 Ideas for Dual Screen Applications Current matches X vs. Y A vs. B X vs. Z Add Score 11 Player X vs. Player Z 7 Tournament Manager
  • 24. 25 Wifi Display APIs -Android* 4.2/4.3 All of the below APIs are internal as of Android* 4.2/4.3 They are part of AOSP and publicly exposed, but not part of the framework so are not guaranteed to work android.hardware.display.DisplayManager … String ACTION_WIFI_DISPLAY_STATUS_CHANGED WifiDisplayStatusgetWifiDisplayStatus() void scanWifiDisplays() void connectWifiDisplay(StringdeviceAdress)¹ void disconnectWifiDisplay()² void forgetWifiDisplay(Stringaddress)² void renameWifiDisplay(String address,Stringalias)² android.hardware.display. WifiDisplayStatus intgetFeatureState() intgetScanState() intgetActiveDisplayState() WifiDisplaygetActiveDisplay() WifiDisplay[] getAvailableDisplays() WifiDisplay[] getRememberedDisplays() android.hardware.display.WifiDisplay StringgetDeviceAddress() String getDeviceName() String getDeviceAlias() String getFriendlyDisplayName() android.provider.Settings … String ACTION_WIFI_DISPLAY_SETTINGS String getDeviceAlias() String getFriendlyDisplayName() ¹android.permission.CONFIGURE_WIFI_DISPLAY required for unknown devices ²android.permission.CONFIGURE_WIFI_DISPLAY always required
  • 25. 26 Adding a MediaRouteButton In res/menu/default.xml: <item android:title="Media Route Settings" android:actionProviderClass="android.app.MediaRouteActionProvider" android:showAsAction="always" /> //Sets Media Route Button to second screen mode mediaRouteActionProvider.setRouteTypes(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
  • 26. 27 Some last comments Presentation from background service: •“Draw over apps” permission (SYSTEM_ALERT_WINDOW) •TYPE_SYSTEM_ALERTLayoutParam. USB Input Back Channel HTML5 : •standard: http://webscreens.github.io/presentation-api/ •Demo implementation in HexGLbuilt with crosswalk: https://github.com/hmin/HexGL •documentation: https://github.com/crosswalk-project/crosswalk- website/wiki/presentation-api-manual
  • 27. Q&A