SlideShare a Scribd company logo
Developing for Android
Wear: Part 2 (Wear-
Generated Notifications
and Wearable Apps)
Justin Munger
GDG Chicago
August 12, 2014
What, No Data Layer API? :-O
● Ended up being too large of a topic to fit in
scope of this talk
● Happy to cover it in a future meeting if there
is sufficient interest
● Added in section on Wear-Generated
Notifications to make up for missing Data
Layer API content
● Quick demo of Data Layer API at end of talk
What is Android Wear?
● Wearable computer in a watch form factor
● Runs Android OS 4.4W (API Level 20)
● Pairs to phone/tablet through Bluetooth
● Uses Android Wear app and Google Play
Services to sync between phone/tablet and
Wear device
● Current devices available (as of July 2014)
are LG G Watch and Samsung Gear Live
Why Android Wear?
● Removes the distractions caused by the
immersive nature of mobile devices
● Delivers only the essential information
needed in a timely manner
● Allows partial interaction with phones/tablets
to perform certain necessary actions
Android Wear Design
Suggest - The Context Stream
● Vertical list of cards
● Cards display contextually-relevant (time-
and/or location-based) information
● One card displayed at a time
● Optional background photos give additional
context
● Cards pushed to user by Android Wear
device and/or paired phone/tablet
Demand - The Cue Card
● Allows user to interact with Wear device
through voice or tapping suggested options
● Contains pre-defined voice commands that
applications can hook into
● Also allows for custom voice commands to
start functionality
● Similar to how a person interacts with
Google Glass and even phones/tablets
What Does This Presentation Cover?
● Wear-generated notifications
● Android Wear apps
Wear-Generated Notifications
Wear-Generated Notifications
● Generated on the Android Wear device
● Used for contextual notifications
● Can use current user context
(time/location/sensor input) to trigger
notifications to user
● Allows for more complex notification
interaction (such as taking action directly on
a card)
How to Get Notifications on Wear
● Create notifications the same way that you
would for phones and tablets
● Use Notification and NotificationManager to
create and post notifications
● Doesn’t require Compat classes if
notification is only displayed on Wear device
● Wear-specific functionality is added using
Notification.WearableExtender()
Creating a Notification on Wear
● Get an instance of NotificationManager
● Create a Notification using the Notification.
Builder methods
● Add Wear-specific functionality using
NotificationManager.WearableExtender
● Call notify() on NotificationManager, passing
in unique notification ID and Notification
object
Basic Notification
● Contains the basic elements that typical
notifications have:
○ Small icon
○ Content title
○ Context text
● Title and text are left aligned on the card
Content Action Notification
● Allows action to be taken directly from the
notification
● Specify a PendingIntent that contains the
Activity to launch when tapping notification
● Add it to a Notification using addAction() in
Notification.WearableExtender()
● Indicate tappable notification action by
setting setContentAction() with Action index
Display Intent Notification
● Custom UI for a notification
● Use an Activity to host the notification layout
● Activity must be defined in AndroidManifest.
xml with specific settings
● Use the WearableExtender to add the
custom UI using setDisplayIntent() method
● Activity is displayed when notification is
moved out of peek state
Custom Size Notification
● Create notifications of five different sizes
from extra-small to full-screen
● Uses an Activity to host the notification
layout
● Use the WearableExtender to add the
custom UI using setDisplayIntent() method
● Set custom size using .
setCustomSizePreset()
Wearable Apps
It’s Android But It’s Not Android
● Android Wear devices has access to most of
the APIs that regular Android devices have
● However, some functionality is not optimized
for Wear devices, mainly UI widgets
● Other functionality is not available on Wear
devices, such as direct network access
What Kind of UI Do We Use Then?
● Unofficial Google library for Android Wear UI
● UI made for small form-factor and to support
square/round displays
● Add the following dependency in the project’
s build.gradle file:
dependencies {
compile 'com.google.android.support:wearable:+'
}
Examples of Wear UI Components
● Wear-specific UI
○ WearableListView
○ GridViewPager
○ CardFragment
● Support UI
○ DismissOverlayView
○ ConfirmationActivity
● Square/Round
Helper UI
○ WatchViewStub
○ BoxInsetLayout
○ InsetActivity
Wear-specific UI
WearableListView
● Wear-specific ListView implementation
● Allows for vertical scrolling of items
● Items lock into place to facilitate easier
scrolling on a small screen
● Subclasses RecyclerView
● Uses Material Design concepts to display
content
WearableListView.Adapter
● Responsible for creating and delivering
content to WearableListView
● Subclasses RecyclerView.Adapter
● Override onCreateViewHolder() to deliver
inflated layout
● Override onBindViewHolder() to populate
inflated layout with content
GridViewPager
● Allows 2D scrolling of content
● Displays content in rows and columns
● GridViewPager is non-symmetric
● Each row can have different column count
● Scrolling up and down between rows moves
back to the first column of the row
● Background images have fade transitions
and parallax effects when scrolling
GridViewAdapter
● Supplies GridViewPager with custom View
● Overrides:
○ getRowCount() - number of rows
○ getColumnCount() - number of columns
○ instantiateItem() - create custom View and add to
ViewGroup
○ destroyItem() - destroy View
○ getBackground() - supply background image using
ImageReference
FragmentGridViewAdapter
● Supplies GridViewPager with Fragment-
based UI to display
● Can use with CardFragment
● Overrides:
○ getRowCount() - number of rows
○ getColumnCount() - number of columns
○ getFragment() - create Fragment-based UI and add
to ViewGroup
○ getBackground() - supply background image using
CardFragment
● Fragment-based UI that renders a card
● Instantiated with static method, specifying
title, text, and icon
● Can specify custom layout by subclassing
and overriding onCreateContentView()
Support UI
DismissOverlayView
● Gives an dismissal option for a full-screen
Wear app when a right swipe can’t be used
● Long-pressing the UI brings up an X in a red
circle
● Tapping the X dismisses the activity
Setting up DismissOverlayView
● Create a style that sets android:
windowSwipeToDismiss=false
● Set theme of the hosting Activity to the style
● Add DismissOverlayView as the last view in
top-level view hierarchy
● Get reference to DismissOverlayView in
Activity
Setting up DismissOverlayView
● Create GestureDetector and create new
SimpleOnGestureListener, overriding
onLongPress()
● Show DismissOverlayView in onLongPress()
● Override onTouchEvent of Activity and pass
event to GestureDetector
● WHEW! That’s a lot of work! :-O There must
be an easier way
ConfirmationActivity
● Display an animation to confirm an action
● Show Success, Open On, and Failure
animations
● Can customize text underneath animations
● Launched from an activity rather than
subclassed
Setting Up ConfirmationActivity
● Add the activity to the application manifest
● Create an intent, explicitly specifying
ConfirmationActivity
● Add intent extras for the animation type and
animation text
● Start the intent
Square/Round Helper UI
WatchViewStub
● Use one activity layout to specify distinct
rectangular and round layouts
● Widget will determine the proper layout to
load based on the form factor
● Retrieve references to UI elements by
implementing WatchViewStub.
OnLayoutInflatedListener() and overriding
onLayoutInflated()
BoxInsetLayout
● Automatically determines form factor and
adjusts UI accordingly
● Specified in XML layout as root element
● No additional code required to use aside
from XML layout element
InsetActivity
● Combines BoxInsetLayout and
DismissOverlayView into one component
● No extra XML layout elements required
● Move normal layout inflation and UI
initialization from onCreate() to
onReadyForContent()
● Sometimes works, sometimes doesn’t
Questions?
Additional Resources
● Android Wear Training:
http://developer.android.
com/training/building-wearables.html
● Google I/O Dev Bytes Wearables Videos:
http://goo.gl/yqWsq4
● Demo code: http://github.
com/justinkmunger/DevelopingForAndroidW
ear
Thank You!

More Related Content

Viewers also liked

A Better Interface Builder Experience
A Better Interface Builder ExperienceA Better Interface Builder Experience
A Better Interface Builder Experience
Justin Munger
 
Presentacion pensamiento sistemico. Tomás Agreda
Presentacion pensamiento sistemico. Tomás AgredaPresentacion pensamiento sistemico. Tomás Agreda
Presentacion pensamiento sistemico. Tomás Agreda
tagreda
 
Bronco Money Matters Report Dec15
Bronco Money Matters Report Dec15Bronco Money Matters Report Dec15
Bronco Money Matters Report Dec15
Rahim Osman
 
Segregación escolar
Segregación escolarSegregación escolar
Segregación escolar
Elizabeth García
 
Developing for Android Wear - Part 1
Developing for Android Wear - Part 1Developing for Android Wear - Part 1
Developing for Android Wear - Part 1
Justin Munger
 
high performance databases
high performance databaseshigh performance databases
high performance databases
mahdi_92
 
острый тонзиллит
острый тонзиллитострый тонзиллит
острый тонзиллит
Sofia2323232323
 
Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...
Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...
Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...
KNEU
 
Path testing
Path testingPath testing
Path testing
Mohamed Ali
 

Viewers also liked (9)

A Better Interface Builder Experience
A Better Interface Builder ExperienceA Better Interface Builder Experience
A Better Interface Builder Experience
 
Presentacion pensamiento sistemico. Tomás Agreda
Presentacion pensamiento sistemico. Tomás AgredaPresentacion pensamiento sistemico. Tomás Agreda
Presentacion pensamiento sistemico. Tomás Agreda
 
Bronco Money Matters Report Dec15
Bronco Money Matters Report Dec15Bronco Money Matters Report Dec15
Bronco Money Matters Report Dec15
 
Segregación escolar
Segregación escolarSegregación escolar
Segregación escolar
 
Developing for Android Wear - Part 1
Developing for Android Wear - Part 1Developing for Android Wear - Part 1
Developing for Android Wear - Part 1
 
high performance databases
high performance databaseshigh performance databases
high performance databases
 
острый тонзиллит
острый тонзиллитострый тонзиллит
острый тонзиллит
 
Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...
Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...
Диагностика товарного рынка Украины: макроэкономические показатели и тенденци...
 
Path testing
Path testingPath testing
Path testing
 

Similar to Developing For Android Wear - Part 2

ANDROID LAB MANUAL.doc
ANDROID LAB MANUAL.docANDROID LAB MANUAL.doc
ANDROID LAB MANUAL.doc
Palakjaiswal43
 
Londroid meetup
Londroid meetupLondroid meetup
Londroid meetup
Jesus Gumiel
 
FirefoxOS Window Management
FirefoxOS Window ManagementFirefoxOS Window Management
FirefoxOS Window Management
Alive Kuo
 
Google I/O 2019 - what's new in Android Q and Jetpack
Google I/O 2019 - what's new in Android Q and JetpackGoogle I/O 2019 - what's new in Android Q and Jetpack
Google I/O 2019 - what's new in Android Q and Jetpack
Sunita Singh
 
Android Made Simple
Android Made SimpleAndroid Made Simple
Android Made Simple
Gabriel Dogaru
 
Droidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introductionDroidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introduction
Michelantonio Trizio
 
Android wear SDK introduction
Android wear SDK introductionAndroid wear SDK introduction
Android wear SDK introduction
Tiziano Basile
 
Introduction to google glass
Introduction to google glassIntroduction to google glass
Introduction to google glass
Anees Haider
 
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
Gunjan Kumar
 
Break Timer: Android-wear introduction and application case-study
Break Timer: Android-wear introduction and application case-studyBreak Timer: Android-wear introduction and application case-study
Break Timer: Android-wear introduction and application case-study
Umair Vatao
 
Developing AIR for Mobile with Flash Professional CS5.5
Developing AIR for Mobile with Flash Professional CS5.5Developing AIR for Mobile with Flash Professional CS5.5
Developing AIR for Mobile with Flash Professional CS5.5
Chris Griffith
 
Build your own remote control. Droidcon greece 2016
Build your own remote control. Droidcon greece 2016Build your own remote control. Droidcon greece 2016
Build your own remote control. Droidcon greece 2016
Jesus Gumiel
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
mharkus
 
Get an Android tutorial for beginners
Get an Android tutorial for beginnersGet an Android tutorial for beginners
Get an Android tutorial for beginners
JavaTpoint.Com
 
Learning Android Part 2/6
Learning Android Part 2/6Learning Android Part 2/6
Learning Android Part 2/6
Girish Bellalcheru
 
Mobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’sMobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’s
Adam Wilson
 
Android by Swecha
Android by SwechaAndroid by Swecha
8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG Granada8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG Granada
JM Robles
 
Notes Unit3.pptx
Notes Unit3.pptxNotes Unit3.pptx
Notes Unit3.pptx
MIT Autonomous Aurangabad
 
How to approach building GUIs using PyQT
How to approach building GUIs using PyQTHow to approach building GUIs using PyQT
How to approach building GUIs using PyQT
Jerlyn Manohar
 

Similar to Developing For Android Wear - Part 2 (20)

ANDROID LAB MANUAL.doc
ANDROID LAB MANUAL.docANDROID LAB MANUAL.doc
ANDROID LAB MANUAL.doc
 
Londroid meetup
Londroid meetupLondroid meetup
Londroid meetup
 
FirefoxOS Window Management
FirefoxOS Window ManagementFirefoxOS Window Management
FirefoxOS Window Management
 
Google I/O 2019 - what's new in Android Q and Jetpack
Google I/O 2019 - what's new in Android Q and JetpackGoogle I/O 2019 - what's new in Android Q and Jetpack
Google I/O 2019 - what's new in Android Q and Jetpack
 
Android Made Simple
Android Made SimpleAndroid Made Simple
Android Made Simple
 
Droidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introductionDroidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introduction
 
Android wear SDK introduction
Android wear SDK introductionAndroid wear SDK introduction
Android wear SDK introduction
 
Introduction to google glass
Introduction to google glassIntroduction to google glass
Introduction to google glass
 
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
 
Break Timer: Android-wear introduction and application case-study
Break Timer: Android-wear introduction and application case-studyBreak Timer: Android-wear introduction and application case-study
Break Timer: Android-wear introduction and application case-study
 
Developing AIR for Mobile with Flash Professional CS5.5
Developing AIR for Mobile with Flash Professional CS5.5Developing AIR for Mobile with Flash Professional CS5.5
Developing AIR for Mobile with Flash Professional CS5.5
 
Build your own remote control. Droidcon greece 2016
Build your own remote control. Droidcon greece 2016Build your own remote control. Droidcon greece 2016
Build your own remote control. Droidcon greece 2016
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
 
Get an Android tutorial for beginners
Get an Android tutorial for beginnersGet an Android tutorial for beginners
Get an Android tutorial for beginners
 
Learning Android Part 2/6
Learning Android Part 2/6Learning Android Part 2/6
Learning Android Part 2/6
 
Mobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’sMobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’s
 
Android by Swecha
Android by SwechaAndroid by Swecha
Android by Swecha
 
8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG Granada8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG Granada
 
Notes Unit3.pptx
Notes Unit3.pptxNotes Unit3.pptx
Notes Unit3.pptx
 
How to approach building GUIs using PyQT
How to approach building GUIs using PyQTHow to approach building GUIs using PyQT
How to approach building GUIs using PyQT
 

Developing For Android Wear - Part 2

  • 1. Developing for Android Wear: Part 2 (Wear- Generated Notifications and Wearable Apps) Justin Munger GDG Chicago August 12, 2014
  • 2. What, No Data Layer API? :-O ● Ended up being too large of a topic to fit in scope of this talk ● Happy to cover it in a future meeting if there is sufficient interest ● Added in section on Wear-Generated Notifications to make up for missing Data Layer API content ● Quick demo of Data Layer API at end of talk
  • 3. What is Android Wear? ● Wearable computer in a watch form factor ● Runs Android OS 4.4W (API Level 20) ● Pairs to phone/tablet through Bluetooth ● Uses Android Wear app and Google Play Services to sync between phone/tablet and Wear device ● Current devices available (as of July 2014) are LG G Watch and Samsung Gear Live
  • 4. Why Android Wear? ● Removes the distractions caused by the immersive nature of mobile devices ● Delivers only the essential information needed in a timely manner ● Allows partial interaction with phones/tablets to perform certain necessary actions
  • 6. Suggest - The Context Stream ● Vertical list of cards ● Cards display contextually-relevant (time- and/or location-based) information ● One card displayed at a time ● Optional background photos give additional context ● Cards pushed to user by Android Wear device and/or paired phone/tablet
  • 7. Demand - The Cue Card ● Allows user to interact with Wear device through voice or tapping suggested options ● Contains pre-defined voice commands that applications can hook into ● Also allows for custom voice commands to start functionality ● Similar to how a person interacts with Google Glass and even phones/tablets
  • 8. What Does This Presentation Cover? ● Wear-generated notifications ● Android Wear apps
  • 10. Wear-Generated Notifications ● Generated on the Android Wear device ● Used for contextual notifications ● Can use current user context (time/location/sensor input) to trigger notifications to user ● Allows for more complex notification interaction (such as taking action directly on a card)
  • 11. How to Get Notifications on Wear ● Create notifications the same way that you would for phones and tablets ● Use Notification and NotificationManager to create and post notifications ● Doesn’t require Compat classes if notification is only displayed on Wear device ● Wear-specific functionality is added using Notification.WearableExtender()
  • 12. Creating a Notification on Wear ● Get an instance of NotificationManager ● Create a Notification using the Notification. Builder methods ● Add Wear-specific functionality using NotificationManager.WearableExtender ● Call notify() on NotificationManager, passing in unique notification ID and Notification object
  • 13. Basic Notification ● Contains the basic elements that typical notifications have: ○ Small icon ○ Content title ○ Context text ● Title and text are left aligned on the card
  • 14. Content Action Notification ● Allows action to be taken directly from the notification ● Specify a PendingIntent that contains the Activity to launch when tapping notification ● Add it to a Notification using addAction() in Notification.WearableExtender() ● Indicate tappable notification action by setting setContentAction() with Action index
  • 15. Display Intent Notification ● Custom UI for a notification ● Use an Activity to host the notification layout ● Activity must be defined in AndroidManifest. xml with specific settings ● Use the WearableExtender to add the custom UI using setDisplayIntent() method ● Activity is displayed when notification is moved out of peek state
  • 16. Custom Size Notification ● Create notifications of five different sizes from extra-small to full-screen ● Uses an Activity to host the notification layout ● Use the WearableExtender to add the custom UI using setDisplayIntent() method ● Set custom size using . setCustomSizePreset()
  • 18. It’s Android But It’s Not Android ● Android Wear devices has access to most of the APIs that regular Android devices have ● However, some functionality is not optimized for Wear devices, mainly UI widgets ● Other functionality is not available on Wear devices, such as direct network access
  • 19. What Kind of UI Do We Use Then? ● Unofficial Google library for Android Wear UI ● UI made for small form-factor and to support square/round displays ● Add the following dependency in the project’ s build.gradle file: dependencies { compile 'com.google.android.support:wearable:+' }
  • 20. Examples of Wear UI Components ● Wear-specific UI ○ WearableListView ○ GridViewPager ○ CardFragment ● Support UI ○ DismissOverlayView ○ ConfirmationActivity ● Square/Round Helper UI ○ WatchViewStub ○ BoxInsetLayout ○ InsetActivity
  • 22. WearableListView ● Wear-specific ListView implementation ● Allows for vertical scrolling of items ● Items lock into place to facilitate easier scrolling on a small screen ● Subclasses RecyclerView ● Uses Material Design concepts to display content
  • 23. WearableListView.Adapter ● Responsible for creating and delivering content to WearableListView ● Subclasses RecyclerView.Adapter ● Override onCreateViewHolder() to deliver inflated layout ● Override onBindViewHolder() to populate inflated layout with content
  • 24. GridViewPager ● Allows 2D scrolling of content ● Displays content in rows and columns ● GridViewPager is non-symmetric ● Each row can have different column count ● Scrolling up and down between rows moves back to the first column of the row ● Background images have fade transitions and parallax effects when scrolling
  • 25. GridViewAdapter ● Supplies GridViewPager with custom View ● Overrides: ○ getRowCount() - number of rows ○ getColumnCount() - number of columns ○ instantiateItem() - create custom View and add to ViewGroup ○ destroyItem() - destroy View ○ getBackground() - supply background image using ImageReference
  • 26. FragmentGridViewAdapter ● Supplies GridViewPager with Fragment- based UI to display ● Can use with CardFragment ● Overrides: ○ getRowCount() - number of rows ○ getColumnCount() - number of columns ○ getFragment() - create Fragment-based UI and add to ViewGroup ○ getBackground() - supply background image using
  • 27. CardFragment ● Fragment-based UI that renders a card ● Instantiated with static method, specifying title, text, and icon ● Can specify custom layout by subclassing and overriding onCreateContentView()
  • 29. DismissOverlayView ● Gives an dismissal option for a full-screen Wear app when a right swipe can’t be used ● Long-pressing the UI brings up an X in a red circle ● Tapping the X dismisses the activity
  • 30. Setting up DismissOverlayView ● Create a style that sets android: windowSwipeToDismiss=false ● Set theme of the hosting Activity to the style ● Add DismissOverlayView as the last view in top-level view hierarchy ● Get reference to DismissOverlayView in Activity
  • 31. Setting up DismissOverlayView ● Create GestureDetector and create new SimpleOnGestureListener, overriding onLongPress() ● Show DismissOverlayView in onLongPress() ● Override onTouchEvent of Activity and pass event to GestureDetector ● WHEW! That’s a lot of work! :-O There must be an easier way
  • 32. ConfirmationActivity ● Display an animation to confirm an action ● Show Success, Open On, and Failure animations ● Can customize text underneath animations ● Launched from an activity rather than subclassed
  • 33. Setting Up ConfirmationActivity ● Add the activity to the application manifest ● Create an intent, explicitly specifying ConfirmationActivity ● Add intent extras for the animation type and animation text ● Start the intent
  • 35. WatchViewStub ● Use one activity layout to specify distinct rectangular and round layouts ● Widget will determine the proper layout to load based on the form factor ● Retrieve references to UI elements by implementing WatchViewStub. OnLayoutInflatedListener() and overriding onLayoutInflated()
  • 36. BoxInsetLayout ● Automatically determines form factor and adjusts UI accordingly ● Specified in XML layout as root element ● No additional code required to use aside from XML layout element
  • 37. InsetActivity ● Combines BoxInsetLayout and DismissOverlayView into one component ● No extra XML layout elements required ● Move normal layout inflation and UI initialization from onCreate() to onReadyForContent() ● Sometimes works, sometimes doesn’t
  • 39. Additional Resources ● Android Wear Training: http://developer.android. com/training/building-wearables.html ● Google I/O Dev Bytes Wearables Videos: http://goo.gl/yqWsq4 ● Demo code: http://github. com/justinkmunger/DevelopingForAndroidW ear