デフォルトの推奨事項は、ユーザーが Android または iOS スマートフォンにアクセスせずにスマートウォッチでタスクを完了できるように、Wear OS アプリをスマートフォンとは独立して動作させることです。ただし、スマートウォッチ アプリが動作するためにスマートフォンの操作が必要な場合は、Wear OS アプリを依存関係ありとしてマークする必要があります。
アプリを計画する
Android App Bundle を使用すると、同じアプリ掲載情報の下に、各ユーザーのデバイス構成に合わせて最適化された APK を自動的に生成できます。これにより、ユーザーはアプリの実行に必要なコードとリソースをダウンロードするだけで済みます。
Google Play ストアで配信するアプリの設定について詳しくは、Wear OS アプリをパッケージ化して配信すると Android App Bundle スタートガイドをご覧ください。
通常、Wear OS アプリの最小 API レベルは API レベル 25(Wear OS 2.0)です。対象 API レベルは API レベル 28 以降であることが必要です(詳細)。アプリが最新のプラットフォーム バージョンで適切に動作するように targetSdkVersion
を API レベル 30(Wear OS 3)に設定することをおすすめします。
ネットワーク リクエストと高帯域幅ネットワーク アクセスについては、Wear OS でのネットワーク アクセスと同期をご覧ください。
アプリを Wear OS アプリとして定義する
アプリの Android マニフェスト ファイルで
<uses-feature>
タグを定義する必要があります。たとえば、次の例のように、スマートウォッチ アプリであることを示します。
<manifest> ... <uses-feature android:name="android.hardware.type.watch" /> ... </manifest>
アプリをスタンドアロンとして指定する
Wear OS アプリでは、Android マニフェスト ファイルで
meta-data
要素の com.google.android.wearable.standalone
を true
または false
に設定する必要があります。
この要素は、スマートウォッチ アプリがコア機能の運用に別のデバイスを必要としないスタンドアロン(独立)アプリであるかどうかを示します。この場合は、要素の設定を true
に設定する必要があります。
スマートウォッチ アプリは次のように分類できます。
- スタンドアロン: 認証などのコア機能のためにスマートフォン アプリを必要としない、完全に独立したアプリ。スマートフォン アプリはオプション機能のみを備えています。
- 非スタンドアロン: 認証などのコア機能のためにスマートフォン アプリまたは別のデバイスを必要とする依存アプリ。
スマートウォッチ アプリが完全に独立している場合は、スタンドアロン カテゴリに分類されます。meta-data
要素の値を true
に設定して、この分類を Google Play ストアに明示する必要があります。
<application> ... <meta-data android:name="com.google.android.wearable.standalone" android:value="true" /> ... </application>
スマートウォッチ アプリがスタンドアロンでない場合は、上記の meta-data
要素の値を false
に設定します。この要素を false
に設定することは、スマートウォッチ アプリに別のデバイスが必要であることを意味しますが、Google Play ストアでのアプリのプロモーションへの影響はありません。
注: 値が false
に設定されていても、スマートフォン アプリをインストールする前にスマートウォッチ アプリをインストールすることは可能です。したがって、必要なスマートフォン アプリがコンパニオン スマートフォンにインストールされていないことをスマートウォッチ アプリが検出した場合、スマートウォッチ アプリは、スマートフォン アプリをインストールするようユーザーに促す必要があります。
共有コードとデータ ストレージ
Wear OS アプリとスマートフォン アプリでコードを共有できます。必要に応じて、フォーム ファクタに固有のコードを別のモジュールに配置することもできます。
たとえば、ネットワーキング用の共通コードを共有ライブラリに含めることができます。
標準の Android ストレージ API を使用して、スマートフォンと同じように、データをローカルに保存できます。たとえば、SharedPreferences API または Room 永続ライブラリを使用できます。
別のデバイスでアプリを検出する
スマートウォッチ アプリで、対応するスマートフォン アプリを使用できるかどうかを検出できます。逆に、スマートフォン アプリで、対応するスマートウォッチ アプリを使用できるかどうかを検出することもできます。
スマートフォン アプリまたはスマートウォッチ アプリで CapabilityClient
を使用すると、ペア設定されているデバイスにアプリのプレゼンスをアドバタイズできます。これは、静的および動的に行うことができます。ユーザーの Wear OS ネットワーク上のノード(スマートフォン、ペア設定されているスマートウォッチ、クラウドなど)にアプリが存在する場合は、CapabilityClient
により、アプリがインストールされていることを別のアプリが検出することが可能になります。詳細については、アドバタイズ機能をご覧ください。
アプリが別のアプリを検出できない場合、リモート デバイスで Play ストアの掲載情報を開く権限をユーザーに付与できます。これは、コンパニオン スマートフォン アプリのプレゼンスが適切に機能する必要があるスマートウォッチ アプリに適したソリューションです。前提条件として、リモート デバイスで Play ストアのプレゼンスを確認する必要があります。
一部のスマートフォンは Play ストアをサポートしていないことにご注意ください(iPhone など)。
このセクションでは、以下の場合におけるおすすめの方法について説明します。
- スタンドアロンのスマートウォッチ アプリがスマートフォン アプリを必要とする場合
- スマートフォン アプリがスタンドアロンのスマートウォッチ アプリを必要とする場合
この機能を示している GitHub のサンプルをご確認ください。以下で説明するクラスの詳細については、Wear OS API のリファレンスをご覧ください。このリファレンスには PhoneDeviceType
クラスに関する情報も記載されています。このクラスには、Wear OS アプリで、コンパニオン スマートフォンが Android デバイス、または iOS デバイスのいずれであるかを確認可能にする getPhoneDeviceType()
メソッドが含まれています。
アプリの検出に使用する機能の名前を指定する
各デバイスタイプ(スマートウォッチまたはスマートフォン)に対応するアプリで、res/values/wear.xml
ファイルに機能名の一意の文字列を指定します。
たとえば、モバイル モジュールでは、wear.xml
ファイルに以下の行を含めることができます。
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@array/android_wear_capabilities"> <string-array name="android_wear_capabilities"> <item>verify_remote_example_phone_app</item> </string-array> </resources>
Wear OS モジュールでは、次のように、wear.xml
ファイルに機能名の別の値を含めます。
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@array/android_wear_capabilities"> <string-array name="android_wear_capabilities"> <item>verify_remote_example_wear_app</item> </string-array> </resources>
詳細については、アドバタイズ機能をご覧ください。
アプリの検出とスマートウォッチから URL へのアクセス
スマートウォッチ アプリは、ユーザーのコンパニオン スマートフォンにスマートフォン アプリがインストールされているかどうかを検出できます。
-
CapabilityClient
を使用して、ペア設定されているスマートフォンにスマートフォン アプリがインストールされているかどうかを確認します。詳細については、GitHub のサンプルをご覧ください。 -
スマートフォン アプリがスマートフォンにインストールされていない場合は、
PhoneDeviceType.getPhoneDeviceType()
メソッドを使用してスマートフォンのタイプを確認します。 -
PhoneDeviceType.DEVICE_TYPE_ANDROID
が返された場合は、Android スマートフォンです。Wear OS デバイスでRemoteActivityHelper.startRemoteActivity()
を呼び出して、スマートフォンでアプリストアを開きます。スマートフォン アプリのマーケット URI を使用します(スマートフォンの URI と異なる場合があります)。たとえば、market://details?id=com.example.android.wearable.wear.finddevices
のようなマーケット URI を使用します。 -
PhoneDeviceType.DEVICE_TYPE_IOS
が返された場合は、(Play ストアを利用できない)iOS スマートフォンです。Wear デバイスでRemoteActivityHelper.startRemoteActivity()
を呼び出して、iPhone で App Store を開きます。URL にはアプリの iTunes の URL を指定できます(例:https://itunes.apple.com/us/app/yourappname
)。iPhone では、スマートフォン アプリがインストールされているかどうかを Wear OS からプログラムで確認することができません。そのため、App Store を手動で開くメカニズム(ボタンなど)をユーザーに提供することをおすすめします。
上記の RemoteActivityHelper
API を使用すると、スマートフォン上で開く URL をスマートウォッチから指定できます(スマートフォン アプリは必要ありません)。
ペア設定されたスマートフォンのタイプを検出する方法の詳細
getPhoneDeviceType()
メソッドを使用して、スマートウォッチがペア設定されているスマートフォンのタイプを確認するスニペットを次に示します。
Kotlin
var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)
Java
int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);
getPhoneDeviceType()
メソッドから返される値は以下のいずれかです。
戻り値 | 説明 |
---|---|
DEVICE_TYPE_ANDROID
|
コンパニオン スマートフォンは Android デバイスです。 |
DEVICE_TYPE_IOS
|
コンパニオン スマートフォンは iOS デバイスです。 |
DEVICE_TYPE_ERROR_UNKNOWN
|
ペア設定されているスマートフォンのタイプの確認中にエラーが発生したため、後でもう一度確認する必要があります。 |
アプリの検出を Android スマートフォンから開始する
Android スマートフォンは、ユーザーの Wear OS デバイスにスマートウォッチ アプリがインストールされているかどうかを検出できます。
-
NodeClient
を使用して、ユーザーのスマートフォンに接続されているスマートウォッチをすべて検出します。詳細については、GitHub のサンプルをご覧ください。 CapabilityClient
を使用して、ユーザーのどのスマートウォッチにアプリがインストールされているかを確認します。-
アプリがインストールされていないスマートウォッチがある場合(ステップ 1 の結果とステップ 2 の結果を比較)、
RemoteActivityHelper.startRemoteActivity()
メソッドを使用すると、ユーザーはスマートフォンからその Wear OS デバイスの Play ストアを開くことが可能になります。具体的には、Wear OS アプリのマーケット URI を使用します(スマートフォン アプリの URI と異なる場合があります)。たとえば、market://details?id=com.example.android.wearable.wear.finddevices
のようなマーケット URI を使用します。
iPhone とペア設定されているスマートウォッチの位置情報
iPhone とペア設定されているスマートウォッチで位置情報を取得するには、Fused Location Provider(FLP)を使用する必要があります。Wear OS 上で位置情報を検出するをご覧ください。
コンパニオン スマートフォンを使用できる場合、FLP はコンパニオン スマートフォンを使用して位置情報を取得します。
必要なデータのみを取得する
一般的に、インターネットからデータを取得する場合は、必要なデータのみを取得する必要があります。そうしないと、不必要な遅延、メモリ使用、電池の消耗を招く可能性があります。
スマートウォッチが Bluetooth LE で接続されている場合、スマートウォッチによっては、アプリはわずか 4 KB/秒の帯域幅しか使用しない可能性があります。そのため、次の手順を使用することをおすすめします。
- スマートフォン アプリでのみ使用される追加データについて、ネットワーク リクエストおよびレスポンスを監査する
- 大きな画像をネットワーク経由でスマートウォッチに送信する前に縮小する
高帯域幅ネットワークが必要な場合は、高帯域幅ネットワークへのアクセスをご覧ください。
その他のコードサンプル
このページで説明した API の使用方法のその他の例については、WearVerifyRemoteApp サンプルをご覧ください。