スタンドアロン 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 と異なる場合があります)。たとえば、次のようなマーケット URI を使用します。market://details?id=com.example.android.wearable.wear.finddevices
  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 と異なる場合があります)。たとえば、次のようなマーケット URI を使用します。market://details?id=com.example.android.wearable.wear.finddevices

iPhone とペア設定されているスマートウォッチの位置情報

iPhone とペア設定されているスマートウォッチで位置情報を取得するには、Fused Location Provider(FLP)を使用する必要があります。詳しくは、Wear OS 上で位置情報を検出するをご覧ください。

コンパニオン スマートフォンを使用できる場合、FLP はコンパニオン スマートフォンを使用して位置情報を取得します。

必要なデータのみを取得する

一般に、インターネットからデータを取得する場合、必要なデータのみを取得する必要があります。そうしないと、不必要な遅延、メモリ使用、電池の消耗を招く可能性があります。

スマートウォッチが Bluetooth LE で接続されている場合、スマートウォッチによっては、アプリはわずか 4 KB/秒の帯域幅を使用する可能性があります。そのため、次の手順を使用することをおすすめします。

  • スマートフォン アプリのみを対象とする追加データの場合、ネットワーク リクエストおよびレスポンスを監査する
  • 大きな画像は、ネットワーク経由でスマートウォッチに送信する前に縮小する

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

その他のコードサンプル

WearVerifyRemoteAppSpeedTracker の各サンプルで、このページで説明した API の使用例が詳しく説明されています。

各サンプルで、このページで説明した API の使用例が詳しく説明されています。