Wear OS アプリはスマートフォンから独立して動作できます。ユーザーは Android または iOS スマートフォンにアクセスせずに、スマートウォッチ上でタスクを完了できます。
以下の関連リソースをご覧ください。
アプリに関する計画を立てる
Google Play の複数 APK(マルチ APK)機能を使用して、同じアプリの掲載情報で複数の APK を公開できます。スマートウォッチ APK は、スマートフォン APK に埋め込まず、この機能を使用して配信する必要があります。Google Play ストアで配信するアプリの設定について詳しくは、Wear アプリのパッケージングと配信および複数 APK の仕組みをご覧ください。
注: Wear の Google Play ストア(つまり、スマートウォッチ版の Play ストア)でプロモーションを行う資格を得るには、アプリがスマートフォンから独立して機能することが必要です。また、Android だけでなく iOS にも対応している必要があります。
通常、スタンドアロン アプリおよび Wear 2.0 のターゲットとなる最小 API レベルは 25 です。Wear 1.0 と 2.0 で同じ APK を使用している場合(つまり、Wear 1.0 APK が埋め込まれている場合)に限り、最小 SDK レベルを 23 にすることができます。
注: Wear 1.x スマートウォッチでのアプリの可用性に影響する遅延の問題により、スタンドアロンの Wear 2.0 APK をビルドして Wear 1.0 APK を引き続き使用する場合は、以下の両方を行ってください。
- スタンドアロン バージョンの Wear APK を提供する
- スマートフォン APK に引き続き Wear APK の特定のバージョンを埋め込む
注意: 埋め込み Wear APK が削除された既存の製品版スマートフォン APK のアップデートを公開する場合、ユーザーがスタンドアロンの Wear APK をインストールする前にスマートフォン APK をアップデートすると、既存の Wear アプリとそのデータが失われます。 既存の製品版スマートフォン APK のアップデートを公開する場合は、そのスマートフォン APK に引き続きスマートウォッチ APK を埋め込んでください。
スタンドアロン アプリにはランタイム権限が必要です。
ネットワーク リクエストと高帯域幅ネットワークへのアクセスについて詳しくは、ネットワーク アクセスと同期をご覧ください。
アプリをスタンドアロンとして指定する
Wear アプリでは、Android マニフェスト ファイル内の
meta-data
要素を <application>
要素の子として設定する必要があります。meta-data
要素の名前には com.google.android.wearable.standalone
を指定し、値には true
または false
を指定する必要があります。この要素はスマートウォッチ アプリがスタンドアロン アプリかどうかを示すものであるため、スマートフォン側の Android アプリで操作する必要はありません。この要素の設定が true
の場合、iPhone とペア設定されているスマートウォッチで Play ストアからアプリを入手できます。ただし、すべてのチャンネル(Beta チャンネルなど)のアクティブな APK でこの要素が true
に設定されている必要があります。現在ユーザーに配信されている APK(アルファ版、ベータ版、製品版)の中に上記の設定になっていないものがある場合、iPhone とペア設定されているスマートウォッチでユーザーが検索を行ってもアプリは見つかりません。
スマートウォッチ アプリは次のように分類できます。
- スマートフォン アプリから完全に独立
- 半独立(スマートフォン アプリは必須ではなく、オプションの機能のみを提供)
- スマートフォン アプリに依存
スマートウォッチ アプリがスマートフォン アプリから完全に独立または半独立している場合は、スタンドアロン アプリと見なされます。meta-data
要素の値を true
に設定して、この分類を Google Play ストアに明示する必要があります。
<application> ... <meta-data android:name="com.google.android.wearable.standalone" android:value="true" /> ... </application>
スタンドアロン アプリ(スマートフォン アプリから完全に独立または半独立しているアプリ)は、iPhone ユーザーと、Play ストアがインストールされていない Android スマートフォンのユーザーによってインストールされる可能性があるため、スマートウォッチ アプリはスマートフォン アプリなしでも使用できる必要があります。
スマートウォッチ アプリがスマートフォン アプリに依存している場合は、前述の meta-data
要素の値を false
に設定します。この要素を false
に設定するということは、Play ストアを使用できるスマートフォンとペア設定されているスマートウォッチにのみスマートウォッチ アプリをインストールできることを意味します。
注: 値が false
に設定されていても、スマートフォン アプリをインストールする前にスマートウォッチ アプリをインストールすることは可能です。したがって、必要なスマートフォン アプリがコンパニオン スマートフォンにインストールされていないことをスマートウォッチ アプリが検出した場合、スマートウォッチ アプリは、スマートフォン アプリをインストールするようユーザーに促す必要があります。
アプリを Wear アプリとして定義する
アプリの Android マニフェスト ファイルで
<uses-feature>
タグを定義し、アプリが watch
アプリであることを示す必要があります。たとえば、次のように android:name="android.hardware.type.watch"
と定義します。
<manifest> ... <uses-feature android:name="android.hardware.type.watch" /> ... </manifest>
共有コードとデータ ストレージ
Wear アプリとスマートフォン アプリでコードを共有できます。必要に応じて、フォーム ファクタに固有のコードを別のモジュールに含めることもできます。
たとえば、ネットワーキング用の共通コードを共有ライブラリに含めることができます。
標準の Android ストレージ API を使用して、スマートフォンと同じように、データをローカルに保存できます。たとえば、SharedPreferences API または Room 永続ライブラリを使用できます。
別のデバイスでアプリを検出する
スマートウォッチ アプリで、対応するスマートフォン アプリを使用できるかどうかを検出できます。逆に、スマートフォン アプリで、対応するスマートウォッチ アプリを使用できるかどうかを検出することもできます。
スマートフォン アプリまたはスマートウォッチ アプリで CapabilityClient
を使用すると、ペア設定されているデバイスにアプリのプレゼンスをアドバタイズできます。これは、静的および動的に行うことができます。ユーザーの Wear ネットワーク上のノード(スマートフォン、ペア設定されているスマートウォッチ、クラウドなど)にアプリが存在する場合、CapabilityClient
により、そのアプリがインストールされていることを別のアプリが検出することが可能になります。詳しくは、アドバタイズ機能をご覧ください。
アプリが別のアプリを検出できない場合、リモート デバイスで Play ストアの掲載情報を開く権限をユーザーに付与できます。これは、コンパニオン スマートフォン アプリのプレゼンスが適切に機能する必要があるスマートウォッチ アプリに適したソリューションです。前提条件として、リモート デバイスで Play ストアのプレゼンスを確認する必要があります。
一部のスマートフォンは Play ストアをサポートしていないことにご注意ください(iPhone など)。
このセクションでは、以下の場合におけるおすすめの方法について説明します。
- スタンドアロンのスマートウォッチ アプリがスマートフォン アプリを必要とする場合
- スマートフォン アプリがスタンドアロンのスマートウォッチ アプリを必要とする場合
この機能を示しているサンプルをご確認ください。以下で説明するクラスについて詳しくは、Wear API リファレンスをご覧ください。このリファレンスには、PhoneDeviceType
クラスに関する情報も記載されています。このクラスに含まれている getPhoneDeviceType()
メソッドを使用して、Wear アプリはコンパニオン スマートフォンが Android デバイスか iOS デバイスかを確認できます。
アプリの検出に使用する機能の名前を指定する
各デバイスタイプ(スマートウォッチまたはスマートフォン)に対応するアプリで、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 モジュールでは、次のように、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
を使用して、ペア設定されているスマートフォンにスマートフォン アプリがインストールされているかどうかを確認します。詳しくは、サンプルをご覧ください。 -
スマートフォン アプリがスマートフォンにインストールされていない場合は、
PhoneDeviceType.getPhoneDeviceType()
メソッドを使用してスマートフォンのタイプを確認します。 -
PhoneDeviceType.DEVICE_TYPE_ANDROID
が返された場合は、Android スマートフォンです。Wear デバイスでRemoteIntent.startRemoteActivity()
を呼び出して、スマートフォンでアプリストアを開きます。スマートフォン アプリのマーケット URI を使用します(スマートフォンの URI と異なる場合があります)。たとえば、market://details?id=com.example.android.wearable.wear.finddevices
のようなマーケット URI を使用します。 -
PhoneDeviceType.DEVICE_TYPE_IOS
が返された場合は、(Play ストアを利用できない)iOS スマートフォンです。Wear デバイスでRemoteIntent.startRemoteActivity()
を呼び出して、iPhone で App Store を開きます。URL にはアプリの iTunes の URL を指定できます(例:https://itunes.apple.com/us/app/yourappname
)。iPhone では、スマートフォン アプリがインストールされているかどうかを Wear OS からプログラムで確認することができません。そのため、App Store を手動で開くメカニズム(ボタンなど)をユーザーに提供することをおすすめします。
上記の RemoteIntent
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 デバイスにスマートウォッチ アプリがインストールされているかどうかを検出できます。
-
NodeClient
を使用して、ユーザーのスマートフォンに接続されているスマートウォッチをすべて検出します。詳しくは、サンプルをご覧ください。 -
CapabilityClient
を使用して、ユーザーのどのスマートウォッチにアプリがインストールされているかを確認します。 -
アプリがインストールされていないスマートウォッチがある場合(ステップ 1 の結果とステップ 2 の結果を比較)、
RemoteIntent.startRemoteActivity()
メソッドを使用すると、ユーザーはスマートフォンからその Wear デバイスの Play ストアを開くことが可能になります。具体的には、Wear アプリのマーケット URI を使用します(スマートフォン アプリの URI と異なる場合があります)。たとえば、market://details?id=com.example.android.wearable.wear.finddevices
のようなマーケット URI を使用します。
iPhone とペア設定されているスマートウォッチの位置情報
iPhone とペア設定されているスマートウォッチで位置情報を取得するには、融合された位置予測プロバイダ(FLP)を使用する必要があります。詳しくは、Wear OS 上で位置情報を検出するをご覧ください。
コンパニオン スマートフォンを使用できる場合、FLP はコンパニオン スマートフォンを使用して位置情報を取得します。
必要なデータのみを取得する
一般的に、インターネットからデータを取得する場合は、必要なデータのみを取得する必要があります。そうしないと、不必要な遅延、メモリ使用、電池の消耗を招く可能性があります。
スマートウォッチが Bluetooth LE で接続されている場合、スマートウォッチによっては、アプリはわずか 4 KB/秒の帯域幅しか使用しない可能性があります。そのため、次の手順を使用することをおすすめします。
- スマートフォン アプリでのみ使用される追加データについて、ネットワーク リクエストおよびレスポンスを監査する
- 大きな画像をネットワーク経由でスマートウォッチに送信する前に縮小する
高帯域幅ネットワークが必要な場合は、高帯域幅ネットワークへのアクセスをご覧ください。
その他のコードサンプル
このページで説明した API の使用方法のその他の例については、WearVerifyRemoteApp サンプルをご覧ください。