Google Play 開発者サービスの一部である Wearable Data Layer API は、ウェアラブル デバイス(スマートウォッチなど)と接続されたハンドヘルド デバイス(通常はスマートフォン)間の通信チャネルを提供します。これは、デバイス間でデータを同期して転送する方法です。
注: この API は Wear OS スマートウォッチ、およびスマートウォッチとペア設定された Android デバイスでのみ使用できます。Wear OS スマートウォッチを iOS スマートフォンとペア設定しており、インターネットに接続できる場合、アプリは他のクラウドベースの API に対してクエリを実行できます。これらの他の API の詳細については、Wear OS でのネットワーク アクセスと同期をご覧ください。
注意: データレイヤ API はハンドヘルドとウェアラブル間の通信用に設計されているため、これらのデバイス間の通信を設定するために使用できる API は、上記のものだけです。たとえば、通信チャネルを作成するために低レベルのソケットを開こうとしないでください。
一般的なユースケース
Data Layer API は、フィットネスやメディアのユースケースに特に便利です。
フィットネス アプリ
Wear OS アプリからモバイルアプリにエクササイズ データを送信する フィットネス アプリでは、スマートウォッチでキャプチャされたエクササイズ データをモバイルアプリまたは ヘルスコネクトに書き込む必要があります。Data Layer API を使用してデータを転送する場合は、メッセージ クライアントを使用して、Wear OS アプリからモバイルアプリにエクササイズ データを送信し、ヘルスコネクトに書き込みます。
自宅でのワークアウト中にモバイル デバイスにライブデータをストリーミングする
一般的な自宅でのワークアウトのシナリオでは、Wear OS デバイスからモバイル デバイスに心拍数データをストリーミングし、モバイル デバイスの画面に最新の心拍数情報を表示します。このデータをストリーミングするには、チャネル クライアントを使用します。
メディアアプリ
スマートウォッチからスマートフォンへの一時停止/再開/開始/終了のアクションでメディア プレーヤーを操作するには、メッセージ クライアントを使用します。
コミュニケーションのオプション
データは次のいずれかの方法で転送されます。
- 直接: Wear OS デバイスと他のデバイスとの間に Bluetooth 接続が確立している場合。
- LTE や Wi-Fi などの利用可能なネットワークを介して、Google のサーバー上のネットワーク ノードを仲介として使用します。
すべてのデータレイヤ クライアントは、デバイスで利用可能な接続に応じて、Bluetooth またはクラウドを使用してデータを交換できます。データレイヤを使用して送信されたデータは、ある時点で Google 所有のサーバーを使用することを前提としています。
Bluetooth
デバイスが Bluetooth で接続されている場合、データレイヤではこの接続が使用されます。デバイス間で 1 つの暗号化されたチャネルがあり、標準の Bluetooth 暗号化を使用して Google Play 開発者サービスによって管理されます。
Cloud
Bluetooth が使用できない場合、データは自動的に Google Cloud を介してルーティングされます。Google Cloud を介して転送されるデータは、すべてエンドツーエンドで暗号化されます。
通信のセキュリティ
Google Play 開発者サービスは、Wear OS デバイスにインストールされたアプリと、近くのハンドヘルド デバイスにインストールされた同じアプリ間の通信をより安全にするために、次の制限を適用しています。
- パッケージ名はデバイス間で一致している必要があります。
- パッケージの署名はデバイス間で一致している必要があります。
接続タイプに関係なく、他のアプリはデータにアクセスできません。
設定
Wearable Data Layer API には、次の依存関係があります。
- Google Play 開発者サービスの最新版
- Wear OS デバイスまたは Wear OS エミュレータ
Wear モジュールの build.gradle ファイルに次の依存関係を設定します。
dependencies {
...
implementation("com.google.android.gms:play-services-wearable:19.0.0")
}
最初のペア設定プロセスを容易にする
Horologist は、プラットフォーム API 上に複数のヘルパー ライブラリを提供します。これには、モバイル デバイスと Wear OS デバイス間の接続を確立するのに役立つデータレイヤ ライブラリが含まれています。また、次の操作を行うための便利な API も用意されています。
- 別のデバイスにアプリをインストールします。
- 別のデバイスでアプリを起動します。
- 別のデバイスで特定のアクティビティを起動する。
- コンパニオン アプリを起動します。
データレイヤにアクセスする
Data Layer API を呼び出すには、Wearable
クラスを使用して、各種のクライアント クラス(DataClient
や MessageClient
など)のインスタンスを取得します。
詳細については、DataLayer サンプルをご覧ください。
最低限のクライアントを使用する
クライアントを作成するには、次のサンプルコードをご覧ください。
Kotlin
val dataClient: DataClient = Wearable.getDataClient(context)
Java
DataClient dataClient = Wearable.getDataClient(context);
コンテキストには任意の有効な Android コンテキストを指定できます。Activity
のスコープ内で API を使用する場合は、Wearable
クラスの getDataClient()
メソッドを使用します。これにより、ユーザーが Google Play 開発者サービスのバージョンを更新するよう求められた場合などに、特定の操作を通知ではなくダイアログとして表示できます。
デフォルトでは、リスナーへのコールバックはアプリのメイン UI スレッドで行われます。別のスレッドでコールバックが行われるようにするには、WearableOptions
オブジェクトを使用してカスタム Looper
を指定します。
Kotlin
runBlocking { Wearable.getDataClient(context, options) }
Java
WearableOptions options = new WearableOptions.Builder().setLooper(myLooper).build(); DataClient dataClient = Wearable.getDataClient(context, options);
詳細については、WearableOptions.Builder
リファレンスをご覧ください。
必要に応じてクライアント インスタンスを再作成する
Wearable API クライアント(DataClient
や MessageClient
など)は低コストで作成できます。そのため、クライアントを保持するのではなく、アプリに適したスタイルを使用して、必要に応じて再作成します。
クライアントの状態(登録済みのリスナーのセットなど)はすべてのクライアントで共有され、アプリの実行中に Google Play 開発者サービスが更新されても保持されます。