スタンドアロンの Wear OS アプリと非スタンドアロンの Wear OS アプリ

Wear OS アプリがスマートフォンから独立して動作し、ユーザーが Android または iOS スマートフォンを利用しなくてもスマートウォッチでタスクを完了できるようにすることをおすすめします。スマートウォッチ アプリがスマートフォンの操作を必要とする場合は、Wear OS アプリを非スタンドアロンとしてマークし、ユーザーがスマートフォン アプリを利用できるようにするための措置を講じる必要があります。

アプリを計画する

Android App Bundle を使用すると、同じアプリ掲載情報の下に、各ユーザーのデバイス設定に合わせて最適化された Android パッケージ キット(APK)を自動的に生成できます。そうすれば、ユーザーはアプリの実行に必要なコードとリソースをダウンロードするだけで済みます。

Google Play ストアで配信するアプリのセットアップについては、Wear OS アプリをパッケージ化して配信するAndroid App Bundle スタートガイドをご覧ください。

新しいアプリの場合、対象 API レベルは 30 以上である必要があります。詳しくは、Google Play の対象 API レベルの要件を満たすをご覧ください。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 の値を設定して、アプリがスタンドアロンか非スタンドアロンかを宣言します。

スマートウォッチ アプリが完全に独立したスタンドアロン アプリである場合は、com.google.android.wearable.standalone の値を true に設定して、そのことを Google Play ストアに伝えます。

<application>
...
  <meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />
...
</application>

スマートウォッチ アプリが非スタンドアロンで、コア機能が別のアプリに依存している場合は、com.google.android.wearable.standalone の値を false に設定します。これは、スマートウォッチ アプリが別のデバイスを必要とすることを意味しますが、Google Play ストアでのアプリのプロモーションには影響しません。

注: com.google.android.wearable.standalone の値が false であっても、スマートフォン アプリをインストールする前にスマートウォッチ アプリをインストールすることは可能です。したがって、このページで説明しているように、必要なスマートフォン アプリがコンパニオン スマートフォンにインストールされていないことをスマートウォッチ アプリが検出した場合は、スマートフォン アプリのインストールをユーザーに促してください。

共有コードとデータ ストレージ

Wear OS アプリとスマートフォン アプリでコードを共有できます。たとえば、ネットワーキング用の共通コードを共有ライブラリに含めることができます。

必要に応じて、フォーム ファクタに固有のコードを別のモジュールに含めることもできます。

標準の Android ストレージ API を使用して、スマートフォンと同じように、データをローカルに保存できます。たとえば、SharedPreferences API または Room 永続ライブラリを使用できます。

別のデバイスでアプリを検出する

スマートウォッチ アプリと対応するスマートフォン アプリは、それぞれ相手のアプリが使用可能かどうかを検出できます。

スマートフォン アプリとスマートウォッチ アプリは、CapabilityClient を使用して、ペア設定されたデバイスにそれぞれのプレゼンスをアドバタイズできます。これは、静的または動的に行うことができます。

ユーザーの Wear OS ネットワーク上のノード(スマートフォン、ペア設定されたスマートウォッチ、クラウドなど)にアプリが存在する場合は、CapabilityClient により、他のアプリがそれを検出することが可能になります。詳しくは、アドバタイズ機能をご覧ください。

一方のアプリが他方のアプリを検出できない場合は、該当のデバイスで Google Play ストアの掲載情報を開くようユーザーに求めることができます。これは、コンパニオン スマートフォン アプリのプレゼンスが適切に機能する必要があるスマートウォッチ アプリに適したソリューションです。

一部のスマートフォン(iPhone など)は Google Play ストアをサポートしていないため、デバイスで Google Play ストアが利用可能かどうかを確認する必要があります。

この後のセクションでは、2 つのシナリオにおけるおすすめの方法について説明します。

  • スタンドアロンのスマートウォッチ アプリがスマートフォン アプリを必要とする場合。
  • スマートフォン アプリがスタンドアロンのスマートウォッチ アプリを必要とする場合

また、 Datalayer ヘルパー サンプルでは、 Horologist の一部である Datalayer ヘルパー ライブラリの使用方法を紹介しています。これらのヘルパーを使用すると、ハンドヘルド デバイスと Wear OS デバイス間の接続をモニタリングできます。 次のセクションで説明するクラスについて詳しくは、Wear OS API リファレンスをご覧ください。 このリファレンスには、 PhoneTypeHelper クラスに関する情報も記載されています。このクラスには、コンパニオン スマートフォンが Android デバイスか iOS デバイスかを Wear OS アプリで確認できるようにする 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 の Datalayer ヘルパー サンプルをご覧ください。
  2. スマートフォン アプリがスマートフォンにインストールされていない場合は、PhoneDeviceType.getPhoneDeviceType() メソッドを使用してスマートフォンのタイプを確認します。詳しくは、次のセクションをご覧ください。
  3. PhoneDeviceType.DEVICE_TYPE_ANDROID が返された場合は、Android スマートフォンです。Wear OS デバイスで RemoteActivityHelper.startRemoteActivity() を呼び出して、スマートフォンで Google Play ストアを開きます。スマートフォン アプリのマーケット URI を使用します。これは、Wear アプリの URI とは異なる場合があります。たとえば、market://details?id=com.example.android.wearable.wear.finddevices のようなマーケット URI を使用します。
  4. PhoneDeviceType.DEVICE_TYPE_IOS が返された場合は、Google Play ストアを利用できない iOS スマートフォンです。Wear デバイスで RemoteActivityHelper.startRemoteActivity() を呼び出して、iPhone で App Store を開きます。アプリの iTunes URL(https://itunes.apple.com/us/app/yourappname など)を指定できます。

    Wear OS から、スマートフォン アプリが iOS デバイスにインストールされているかどうかをプログラムで確認することはできません。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_UNKNOWN コンパニオン スマートフォンは不明なデバイスです。
DEVICE_TYPE_ERROR ペア設定されているスマートフォンのタイプの確認中にエラーが発生したため、後でもう一度確認する必要があります。

アプリの検出を Android スマートフォンから開始する

Android スマートフォンは、ユーザーの Wear OS デバイスにスマートウォッチ アプリがインストールされているかどうかを検出できます。手順は次のとおりです。

  1. NodeClient を使用して、ユーザーのスマートフォンに接続されているスマートウォッチをすべて検出します。詳細については、GitHub の Datalayer ヘルパー サンプルをご覧ください。
  2. CapabilityClient を使用して、ユーザーのどのスマートウォッチにアプリがインストールされているかを確認します。
  3. アプリがインストールされていないスマートウォッチがある場合は、RemoteActivityHelper.startRemoteActivity() メソッドを使用して、ユーザーがスマートフォンから残りの Wear OS デバイスで Google 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/秒の帯域幅しか使用しない可能性があります。そのため、次の手順を使用することをおすすめします。

  • スマートフォン アプリでのみ必要な追加データについて、ネットワーク リクエストおよびレスポンスを監査する。
  • 大きな画像は、ネットワーク経由でスマートウォッチに送信する前に圧縮します。

高帯域幅ネットワークが必要な場合は、高帯域幅ネットワークへのアクセスをご覧ください。

他のサンプルコード

Datalayer ヘルパー サンプルでは、このページで説明した API の使用方法をさらに詳しく説明しています。