Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

スタンドアロン Wear アプリ

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 へのアクセス

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

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

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