スタンドアロンの Wear OS アプリとスタンドアロンではない Wear OS アプリ

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

デフォルトの推奨事項は、ユーザーが 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.standalonetrue または 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 へのアクセス

スマートウォッチ アプリは、ユーザーのコンパニオン スマートフォンにスマートフォン アプリがインストールされているかどうかを検出できます。

  1. CapabilityClient を使用して、ペア設定されているスマートフォンにスマートフォン アプリがインストールされているかどうかを確認します。詳細については、GitHub のサンプルをご覧ください。
  2. スマートフォン アプリがスマートフォンにインストールされていない場合は、PhoneDeviceType.getPhoneDeviceType() メソッドを使用してスマートフォンのタイプを確認します。
  3. PhoneDeviceType.DEVICE_TYPE_ANDROID が返された場合は、Android スマートフォンです。Wear OS デバイスで RemoteActivityHelper.startRemoteActivity() を呼び出して、スマートフォンでアプリストアを開きます。スマートフォン アプリのマーケット URI を使用します(スマートフォンの URI と異なる場合があります)。たとえば、market://details?id=com.example.android.wearable.wear.finddevices のようなマーケット URI を使用します。
  4. 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 デバイスにスマートウォッチ アプリがインストールされているかどうかを検出できます。

  1. NodeClient を使用して、ユーザーのスマートフォンに接続されているスマートウォッチをすべて検出します。詳細については、GitHub のサンプルをご覧ください。
  2. CapabilityClient を使用して、ユーザーのどのスマートウォッチにアプリがインストールされているかを確認します。
  3. アプリがインストールされていないスマートウォッチがある場合(ステップ 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 サンプルをご覧ください。