Wear OSアプリは、携帯電話とは独立して動作します。 ユーザーは、AndroidまたはiOSの携帯電話にアクセスせずに、時計のタスクを完了することができます。
以下の関連リソースを参照してください:
- リモートアプリサンプルの確認
アプリを計画する
Google Playの複数のAPK(マルチAPK)機能を使用して、同じアプリケーションリストの下に複数のAPKを公開することができます。 Watch APKは、その機能を使用して配布する必要があります; 携帯電話のAPKに時計のAPKを埋め込んではいけません。 Google Playストアを介して配布するアプリの設定については、”Wearアプリのパッケージ化と配布”および複数のApkの動作方法を参照してください。
注:WearのGoogle Playストア(つまり、ウォッチ上のPlayストア)でプロモーションの対象となるには、アプリが携帯電話とは独立して機能する必要があります。 iOSとAndroidのサポートが必要です。
一般的に、スタンドアロンアプリとWear2.0の最小およびターゲットAPIレベルはレベル25です。 最小SDKレベルは、Wear1.0と2.0に同じAPKを使用している場合(したがって、Wear1.0APKが埋め込まれている場合)にのみ23になります。
注:Wear1でのアプリの可用性に影響を与えるレイテンシの問題のため。xの時計,あなたは、スタンドアロンの摩耗を構築する場合2.0APKと摩耗を持っていきます1.0APK,次の両方を行います:
- wear APKのスタンドアロンバージョンを提供し、
- は引き続きwear APKのバージョンを携帯電話のAPKに埋め込みます
注意: 組み込みのWear APKを削除した既存の実稼働電話APKの更新を公開すると、スタンドアロンWear APKをインストールする前に電話APKを更新した実稼働ユーザーは、既 既存の実稼働電話APKの更新を公開する場合は、ウォッチAPKをその電話APKに引き続き埋め込みます。
スタンドアロンアプリケーションには実行時の権限が必要です。
ネットワーク要求と高帯域幅ネットワークアクセスの詳細については、”ネットワークアクセスと同期”を参照してください。
アプリをスタンドアロンとして識別する
Wearアプリは、<application>
要素の子として、Androidマニフェストファイルに meta-data
要素を持たなければなりません。 meta-data
要素の名前はcom.google.android.wearable.standalone
で、値はtrue
またはfalse
でなければなりません。 この要素は、watchアプリがスタンドアロンアプリであるかどうかを示しているため、携帯電話側のAndroidアプリを操作する必要はありません。 要素の設定がtrue
の場合、すべてのチャンネル(ベータチャンネルなど)のアクティブなApkの要素がtrue
に設定されている限り、iphoneとペアリングされたwatchesのPlayストアアプリを利用できるようにすることができます。 現在ユーザーに提供されているすべてのApk(alpha、beta、およびproduction)が上記の設定を持っていない場合、ユーザーがiPhoneとペアリングされた時計で検索したときにアプリ
ウォッチアプリは、次のいずれかとみなすことができます:
- 電話アプリから完全に独立
- 半独立(電話アプリは必須ではなく、オプション機能のみを提供します)
- 電話アプリに依存
時計アプリが完全に独立しているか半独立している場合は、スタンドアロンカテゴリに含まれているとみなされます。 このmeta-data
要素の値を次のように設定して、この分類をGoogle Playストアに指定する必要がありますtrue
:
<application>... <meta-data android:name="com.google.android.wearable.standalone" android:value="true" />...</application>
スタンドアロンアプリ(つまり、独立したアプリまたは半独立したアプリ)は、iPhoneユーザーまたはPlayストアを欠いているAndroid携帯電話のユーザーによってインストー
ウォッチアプリが電話アプリに依存する場合は、上記のmeta-data
要素の値をfalse
に設定します。 この要素をfalse
に設定すると、watchアプリはPlayストアを持つ電話機とペアになっているwatchにのみインストールする必要があります。
注:値がfalse
であっても、電話アプリをインストールする前にwatchアプリをインストールすることができます。 したがって、ウォッチアプリが、コンパニオン電話に必要な電話アプリがないことを検出した場合、ウォッチアプリは、ユーザーに電話アプリのインスト
アプリをWearアプリとして定義する
アプリのAndroidマニフェストファイルで <uses-feature>
タグが定義されていることを確認する必要があります。 たとえば、android:name="android.hardware.type.watch"
は次のように、watch
アプリであることを示す必要があります:
<manifest>... <uses-feature android:name="android.hardware.type.watch" />...</manifest>
共有コードとデータストレージ
コードは、Wearアプリとphoneアプリの間で共有できます。 必要に応じて、フォームファクタに固有のコードを別のモジュールに含めることができます。
たとえば、ネットワーク用の共通コードを共有ライブラリに含めることができます。
標準のAndroidストレージApiを使用して、電話の場合と同様にデータをローカルに保存できます。 たとえば、SharedPreferences ApiまたはRoom永続化ライブラリを使用できます。
別のデバイスでアプリを検出
ウォッチアプリは、対応する電話アプリが利用可能かどうかを検出できます。
お使いの携帯電話アプリまたはウォッチアプリは、CapabilityClient
を使用して、ペアリングされたデバイスにアプリの存在をアドバタイズできます。 これは静的かつ動的に行うことができます。 アプリがユーザーのWearネットワーク内のノード上にある場合(電話、ペアリングされた時計、またはクラウド上)、CapabilityClient
は、別のアプリがインストールされているかどうかを検 詳細については、”Advertise capabilities”を参照してください。
いずれかのアプリが他のアプリを検出できない場合は、ユーザーがリモートデバイスでPlayストアのリストを開くことを有効にできます。 これは、適切に機能するために彼らの仲間の携帯電話アプリの存在を必要とする時計アプリのためのソリューションです。 前提条件は、リモートデバイス上のPlayストアの存在を確認することです。
すべての携帯電話がPlayストアをサポートしているわけではないことに注意してください(iphoneなど。).
このセクションでは、これらのシナリオのベストプラクティスについて説明します:
- スタンドアロンのウォッチアプリには電話アプリが必要です
- スマートフォンアプリにはスタンドアロンのウォッチアプリが必要です
この機能を示しているサンプルを確認してください。 以下で説明するクラスの詳細については、”Wear APIリファレンス”を参照してください。 このクラスには、wearアプリがコンパニオン電話がAndroidまたはiOSデバイスであるかどうかを確認できるようにするgetPhoneDeviceType()
メソッドが含まれています。
アプリを検出するための機能名の指定
各デバイスタイプ(watchまたはphone)に対応するアプリについて、res/values/wear.xml
ファイルで機能名に一意の文字列を指定します。
たとえば、モバイルモジュールでは、wear.xml
ファイルに次のものを含めることができます。
wearモジュールでは、wear.xml
ファイルには、次のような機能名に別の値が含まれます。
詳細については、”機能のアドバタイズ”を参照してください。
アプリの検出とウォッチからURLを開く
ウォッチアプリは、ユーザーの仲間の携帯電話に電話アプリがあるかどうかを検出できます:
-
CapabilityClient
を使用して、ペアリングされた電話機に電話アプリがインストールされているかどうかを確認します。 詳細については、サンプルを参照してください。 - お使いの携帯電話アプリが携帯電話にインストールされていない場合は、
PhoneDeviceType.getPhoneDeviceType()
メソッドを使用して携帯電話の種類を確認してください。 -
PhoneDeviceType.DEVICE_TYPE_ANDROID
が返された場合、電話機はAndroid電話機です。 WearデバイスのRemoteIntent.startRemoteActivity()
に電話して、電話でapp storeを開きます。 お使いの携帯電話アプリの市場URIを使用します(これは携帯電話のURIとは異なる場合があります)。 たとえば、次のような市場URIを使用します:market://details?id=com.example.android.wearable.wear.finddevices
-
PhoneDeviceType.DEVICE_TYPE_IOS
が返された場合は、その電話機がiOS電話機であることを意味します(Playストアが利用できません)。 WearデバイスでRemoteIntent.startRemoteActivity()
を呼び出して、iPhoneのApp Storeを開きます。 たとえば、のように、アプリのiTunes URLを指定できます。 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デバイスにwatchアプリがあるかどうかを検出できます:
-
NodeClient
を使用して、ユーザーの携帯電話に接続されているすべての時計を検索します。 詳細については、サンプルを参照してください。 -
CapabilityClient
を使用して、どのユーザーの時計にアプリがインストールされているかを確認します。 - アプリがユーザーのすべての時計にインストールされていない場合(手順1の結果と手順2の結果を比較)、ユーザーは
RemoteIntent.startRemoteActivity()
メソッドを介して電話から残りのWearデバ 具体的には、Wearアプリのmarket URIを使用します(これは携帯電話アプリのURIとは異なる場合があります)。 たとえば、次のような市場URIを使用します:market://details?id=com.example.android.wearable.wear.finddevices
iphoneにペアリングされた時計の位置データ
iphoneにペアリングされた時計の場合、開発者はFused Location Provider(FLP)を使用して時計の位置データを取得する必要があります。 摩耗の位置の検出を参照してください。
コンパニオン電話が利用可能な場合、FLPはコンパニオン電話を位置データに使用します。
必要なデータのみを取得する
一般的に、インターネットからデータを取得する場合は、必要なデータのみを取得する必要があります。 それ以外の場合は、不要な遅延、メモリ使用、およびバッテリ使用が発生する可能性があります。
時計がBluetooth LE接続で接続されている場合、時計に応じて、アプリは毎秒4キロバイトの帯域幅にアクセスできる場合があります。 したがって、次の手順をお勧めします:
- 大きな画像をネットワーク経由でウォッチに送信する前に縮小する
高帯域幅ネットワークが必要な場合は、”高帯域幅ネットワークアクセス”を参照してく
その他のコードサンプル
WearVerifyRemoteAppサンプルは、このページで説明するApiの使用方法をさらに示しています。