By +Wayne Piekarski, Developer Advocate, Android Wear
For developers using the Android Wear APIs in Google Play services, it is important to correctly handle all the error conditions that can occur on legacy phones or when users do not have a wearable device. This post describes the best practice in handling error conditions with the GoogleApiClient
connect() method. If you do not implement this correctly, your existing application functionality may fail for non-wearable users.
There are two ways that the
connect() method can return
ConnectionResult.API_UNAVAILABLE for wearable support with Google Play services:
- When requesting
Wearable.APIon any device running Android 4.2 (API level 17) or earlier
- When requesting
Wearable.APIwhen no Android Wear companion application or device is available
Google Play services provides a wide range of useful features such as integration with Google Drive, Wallet, Google+, and Google Play games services (just to name a few!). During initialization, the application uses
GoogleApiClient.Builder() to make calls to
addApi() to request the features that are necessary. The
connect() method is then called to establish a connection to the Google Play services library, and it can return error codes if any API is not available.
If you request multiple APIs from a single
GoogleApiClient, such as Drive and Wear, and the Wear support returns
API_UNAVAILABLE, then the Drive request will also fail. Since Wear support is not guaranteed to be available on all devices, you should make sure to use a separate client for this request.
The best practice for developers is to implement two separate GoogleApiClient connections:
- One connection for Android Wear support, and
- A separate connection for all of the other APIs you need
This will ensure that the functionality of your app will remain for all users, whether or not there is wearable support available on their devices, as well as on older legacy devices.
It's important that you implement this best practice immediately, because your current users may be affected if not handled correctly in your app.