<br />


Wear OS is based on Android, so many of the best practices for Android also apply to Wear OS.
However, Wear OS is optimized for the wrist, so there are some differences between the two.


To optimize your development time, review the principles below before you start building your
Wear OS app.

<br />

<br />


**Note:** New Wear OS quality requirements will come into effect August 31, 2023.
For a full list of requirements, see
[Wear OS app quality](https://developer.android.com/docs/quality-guidelines/wear-app-quality).

<br />

<br />

## Design for critical tasks

<br />

<br />


Focus on one or two needs of your target users rather than a full app experience. Don't migrate
an entire mobile codebase and put a Wear OS user interface on top.


Instead, find critical tasks that work well on the wrist and streamline the experience on Wear
OS.

<br />

![app samples](https://developer.android.com/static/wear/images/principles_1.png "image_tooltip")

<br />

## Optimize for the wrist

<br />

<br />


Help people complete tasks on the watch within seconds to avoid ergonomic discomfort or arm
fatigue.


Review the [Wear OS design guidelines](https://developer.android.com/training/wearables/design) to
learn more about optimizing for the wrist.

<br />

![timer sample](https://developer.android.com/static/wear/images/principles_4.png "image_tooltip")

## Respect the user's privacy

Your app must earn a user's trust before they give permission for your app to
access potentially sensitive information about them. The system provides several
ways to help users maintain their privacy.

### Privacy dashboard

Starting in Wear OS 5, the system supports the [privacy dashboard](https://support.google.com/android/answer/13530434). This
dashboard offers users a centralized view of each app's data usage, including
the following details:

- The data types being accessed, such as location and microphone.
- How recently those data types were accessed.

With access to this information, users can make more informed decisions about
which apps should still have access to their personal data. To maintain user
trust, use data responsibly and be transparent when collecting and using user
data.

### Screenshot detection

On devices that run Wear OS 5 or higher, apps can use a privacy-preserving
[screenshot detection API](https://developer.android.com/about/versions/14/features/screenshot-detection).

<br />

## Use the appropriate surface for the task

<br />

<br />


Wear OS has many more surfaces than mobile to engage users. Apps should tailor their content for
those surfaces.


Each surface has its own use case. If more action is required, direct users into a
fuller app experience.

<br />

<br />


Read and understand how your content scales across each surface according to the priority of
user needs. Following is an example of priorities for a weather app.

<br />

|------------------------------------------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|
| ![](https://developer.android.com/static/wear/images/principles_9.png) | ![](https://developer.android.com/static/wear/images/principles_updated_2.png) | ![](https://developer.android.com/static/wear/images/principles_updated_6.png) | ![](https://developer.android.com/static/wear/images/principles_updated_5.png)                                       |
| Complication P1: What's the weather right now?                         | Notification P1 Tell me about a severe weather advisory                        | Tile P1: What's the weather right now? P2: What's the weather today?           | App P1: What's the weather right now? P2: What's the weather today? P3: What's the hourly breakdown? P3: Preferences |

![weather tile](https://developer.android.com/static/wear/images/principles_7.png "image_tooltip")

<br />


To learn more, read our User Interface Guide.

<br />

<br />

## Add notifications to additional surfaces

<br />

<br />


In Wear OS API level 30 and higher, pair any ongoing notification to an
`OngoingActivity` to add that notification to additional surfaces within the Wear OS
user interface to increase engagement with long running activities.

<br />

<br />

## Support offline scenarios

<br />

<br />


While a Wear OS device generally supports Bluetooth and Wi-Fi, it might not support LTE. Design for
spotty connections and offline use cases, such as exercising and commuting, when a user may
leave their mobile device at home.

<br />

![offline examples](https://developer.android.com/static/wear/images/principles_3.png "image_tooltip")

<br />

## Provide relevant content

<br />

<br />


The watch is almost always with the user. Keep your app content updated with the user's context,
such as their time, place, and activity.

<br />

![surfaces](https://developer.android.com/static/wear/images/principles_6.png "image_tooltip")

<br />

## Aid users in completing a task from another device

<br />

<br />


People increasingly own multiple devices. The watch can aid people in completing a task across a
distributed ecosystem of devices. Review use cases where this makes sense for your app.

<br />

<br />

## Improve user experience during an app cold start

<br />

<br />


To improve user experience during an app cold start, create a splash activity with a separate
theme and set its `windowBackground` to your custom splash drawable in the manifest
file. The splash screen is made up of a layer-list with two elements, the background color and
the custom drawable that is typically your app icon. The drawable should be 48 x 48dp.

<br />

<br />

## Considerations for media apps

<br />

<br />

### Enable playback controls for music from the phone

<br />

<br />


If your app is installed on both the phone and watch, users expect to have remote controls from
their watch. For example, users expect the ability to pause, play, or skip songs from their
watch.

<br />

<br />

### Downloaded content

<br />

<br />


As called out earlier, it is important to support offline scenarios. This is especially
important for media apps. For media apps, it is easier to support offline downloads first, then
to add streaming ability if you see the demand.


When designing, make it clear to the user what content is available offline. For any
long-running immediate or periodic tasks, use
[WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager). Defer downloads until the
watch is charging and connected to Wi-Fi.

<br />

<br />

### Streaming on LTE

<br />

<br />


Consider offering streaming support on devices that have LTE connectivity, a common use case for
media playback. Streaming allows users to leave their other devices at home and still listen to
music. Make sure to visually communicate to the user when they are streaming music and cache
streamed audio. Avoid using LTE for any jobs that could be deferred, such as sending
logging and analytics data, to optimize power usage while streaming.

<br />

<br />

### Support Bluetooth headphones

<br />

<br />


Users may take only their watch and headphones out for a run or walk. Enable them to have a true
standalone experience by supporting pairing with headphones. If headphones are not connected
when playing or resuming music, launch
[Bluetooth settings](https://developer.android.com/reference/android/provider/Settings#ACTION_BLUETOOTH_SETTINGS)
to allow the user to connect to their Bluetooth headphones directly from the app.

<br />

<br />

### Indicate music source

<br />

<br />


Clearly indicate whether the sound is coming from the watch or the phone. Use a source icon to
indicate where the music is playing. The default source should be where the user starts the
music.

<br />

<br />

### Using the speaker

<br />

<br />


Some Wear OS devices include a built-in speaker which can be used for things like reminders and
alarms. Avoid using the built-in speaker for playing media and music, as users expect these
experiences to be tied to using headphones. For more information, see
[Detecting audio devices](https://developer.android.com/training/wearables/apps/audio#detecting-audio-devices).

<br />

<br />

## Considerations for fitness apps

<br />

<br />


When creating fitness apps for Android 10 and higher, request the
[Physical activity recognition](https://developer.android.com/about/versions/10/privacy/changes#physical-activity-recognition) permission.

<br />

<br />

### Complement the mobile app

<br />

<br />


As outlined above, a Wear OS fitness app should handle only critical tasks for the wrist. This
means a fitness Wear OS app will mostly focus on data gathering.


While you can allow some post-workout summary screens, leave detailed post-workout analysis, and
any other features that require more screenspace to the mobile app.

<br />

<br />

### Support long-lived activities

<br />

<br />


Like many apps that subscribe to location and sensor data, design your app to handle running
*while-in-use*. This means your app should function in the foreground.

<br />

<br />


If the workout starts in an activity, bind that activity to a service that will do the work.
When the user navigates away from your app, the service will unbind and can promote itself to an
ongoing notification.


In Wear OS, you can expose your Ongoing Notifications to new surfaces with
the Ongoing Activity API using a minimal amount of code.


Review the [Ongoing Activity code lab](https://developer.android.com/codelabs/ongoing-activity) on GitHub
to see a simplified app with this architecture.

<br />

<br />

### Use always-on sparingly

<br />

<br />


If a user stops using their watch during a session with your app, the device will eventually go
into system ambient mode to save battery.


Wear OS will bring that app back to an active state if the user interacts with the device again
within a specified amount of time.


For most use cases, this should be enough for user to have a good experience and save battery
life.


In some cases, you may need your app to be visible for longer, such as during an entire
workout. For those cases, you will need to use
[`AmbientLifecycleObserver`](https://developer.android.com/reference/androidx/wear/ambient/AmbientLifecycleObserver).
For more information, see
[Keep your app visible on Wear](https://developer.android.com/training/wearables/apps/always-on).

<br />

<br />

### Don't hold a wake lock

<br />

<br />


Use APIs such as [Health Services](https://developer.android.com/health-and-fitness/guides/health-services) to obtain sensor data, while allowing the CPU to sleep between readings or
delivery.

<br />

<br />

### Optimize location and sensor management

<br />

<br />


Sensor management is very important and can impact battery life negatively if not done properly.


Make sure you follow these recommendations when implementing your sensor strategy:

- Always use sensors in batch mode where possible.
- Flush sensors when the screen/app becomes active again.
- Change the length of batching when the screen goes off to conserve power.
- Unregister sensor listeners when they are no longer needed.
- For location sensors, follow the best practices recorded at [Detect location on Wear OS](https://developer.android.com/training/articles/wear-location-detection).

<br />

<br />

<br />

### Use haptics to confirm actions

<br />

<br />


Use [haptic feedback](https://developer.android.com/develop/ui/views/haptics/haptic-feedback) to confirm actions,
such as start, stop, auto-pause, or auto-lap.

<br />

<br />

### Use touch lock


In some cases, disabling the touch experience improves the app experience. For example, it makes
sense to disable touch when tracking a workout, because accidental touch is very likely in this
case.

<br />

<br />

## Considerations for messaging apps

<br />

<br />

### Start with notifications

<br />

<br />


Support
[MessagingStyle](https://developer.android.com/reference/androidx/core/app/NotificationCompat.MessagingStyle)
to improve your user's app experience.

<br />

### Support voice input

<br />

<br />


Make sure to support speech-to-text, as it's much faster on a watch. You may also want to
support recorded audio as well.

<br />