スタンドアロン デバイスでネットワーク経由で直接通信する

Wear OS by Google 搭載のスマートウォッチは、ネットワークに直接通信できるため、 Android または iOS スマートフォンへのアクセス。Data Layer API を使用してデータを ネットワークに接続します。代わりに、 ご覧ください

ネットワーク アクセス

Wear OS アプリはネットワーク リクエストを行うことができます。スマートウォッチが Bluetooth に対応している場合 場合、ウォッチのネットワークトラフィックは通常、 操作できます。

スマートフォンが利用できない場合は、状況によって Wi-Fi とモバイル ネットワークが使用されます。 時計のハードウェアです。ネットワーク間の遷移は Wear OS プラットフォームによって処理されます。

HTTP、TCP、UDP などのプロトコルは使用できますが、ただし、 CookieManager クラスを含む android.webkit API は、 できます。Cookie を使用するには、リクエストのヘッダーの読み書きと できます。

定期的なポーリングなどの非同期リクエストには WorkManager を使用する できます。

特定の種類のネットワークに接続する必要がある場合は、読み取りネットワーク 確認します

高帯域幅ネットワークへのアクセス

Wear OS プラットフォームは、ネットワーク接続を管理して、 全体的なユーザーエクスペリエンスが 最適化されますプラットフォームは、デフォルトのアクティブ ネットワークを 大容量バッテリーとネットワーク帯域幅の 2 つのニーズを両立させました。

バッテリーの節約を優先すると、アクティブなネットワークで 大容量のファイルの転送やストリーミングといった ネットワークタスクに十分な できます。

このセクションでは、ConnectivityManager クラスを使用して次のことを行う方法について説明します。 アプリに必要なネットワーク帯域幅を確保するうえで役立ちます。一般的な ネットワーク リソースのきめ細かい制御については、 ネットワーク使用量

Wi-Fi 接続をリクエストする

高帯域幅のネットワーク アクセスが必要なユースケース( 大容量ファイルやストリーミング メディア、高帯域幅での接続性のリクエスト 通信を提供します。これを次の例に示します。

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

ウォッチの Wi-Fi または Wi-Fi 接続が原因で、ネットワークを即座に取得できない場合があります。 バッテリーを節約するために、セル無線通信がオフになることもあります。スマートウォッチを NetworkCallback インスタンスの onAvailable() メソッドは 呼び出すことができます。

onAvailable() が呼び出されると、デバイスは NetworkCallback がリリースされるまで Wi-Fi ネットワークが解放されます。バッテリーを長持ちさせるには、 コールバックが不要になったときに、次の例に示すようにコールバックを解放します。 Wi-Fi ネットワーク。

Kotlin

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Java

connectivityManager.bindProcessToNetwork(null);
connectivityManager.unregisterNetworkCallback(callback);

Wi-Fi 設定アクティビティを開始する

Wi-Fi ネットワークをリクエストすると、システムは保存済みネットワークに接続しようとします。 1 が構成されていて範囲内にある場合。利用可能な保存済みの Wi-Fi ネットワークがない場合は、 NetworkCallback インスタンスの onAvailable コールバック メソッドは呼び出されません。

Handler を使用してネットワーク リクエストをタイムアウトにしている場合は、 タイムアウトの発生時にユーザーに Wi-Fi ネットワークを追加してもらう必要があります。ユーザーを 以下のインテントを使用して、Wi-Fi ネットワークを追加するためのアクティビティを実行します。

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

設定アクティビティを開始するには、アプリに CHANGE_WIFI_STATE が必要です。 付与します。

ユーザー インターフェースに関する考慮事項

アプリが高帯域幅のために新しい Wi-Fi ネットワークへの接続を必要とする場合 接続の理由が明確にわかるようにしてから、 Wi-Fi 設定を起動します。新しい Wi-Fi の追加のみをお客様にリクエストします。 高帯域幅ネットワークが必要な場合に、ネットワークに接続できます。ユーザーをブロックしない 高帯域幅ネットワークを必要としないアプリの機能にアクセスする場合。

図 1 は音楽アプリを示しています。このアプリを使用すると、 新しい Wi-Fi ネットワークを追加する必要があるのは、 音楽のダウンロードやストリーミングをしたいと思うでしょう。

音楽のダウンロード

図 1. 音楽アプリのダウンロード フロー

電力とデータの使用に関する考慮事項

バッテリーを長持ちさせ、モバイルデータの使用量を最小限に抑えるために、 分析レポートやログ収集など、必須ではないネットワーク タスク Wear OS デバイスで Bluetooth または Wi-Fi 接続が再確立されるまで LTE や従量制接続の代わりになります。

クラウド メッセージング

通知の送信には、Firebase Cloud Messaging(FCM)を直接使用します。

ネットワーク アクセスや FCM 用の API は、Wear OS に固有のものではありません。詳しくは、既存の ネットワークへの接続クラウド メッセージングに関するドキュメントをご覧ください。

FCM は Doze モードでも適切に動作するため、通知を送信する方法として推奨される 。

デバイスの登録トークンを収集して FCM からのメッセージを提供する パフォーマンスが向上します次に、そのトークンをデスティネーションの一部として サーバーが FCM REST エンドポイントにメッセージを送信したとき。FCM はメッセージを トークンで識別されるデバイスです。

FCM メッセージは JavaScript Object Notation(JSON)形式であり、 次のペイロードの 1 つまたは両方:

  • 通知ペイロード: 通知ペイロードを データが通知ストリーム内で直接ユーザーに表示されます。日時 ユーザーが通知をタップすると、アプリが起動します。
  • データ ペイロード: ペイロードに一連のカスタム Key-Value ペアが含まれている場合。 ペイロードは Wear OS アプリにデータとして配信されます。

ペイロードの詳細と例については、FCM メッセージについてをご覧ください。

デフォルトでは、通知はスマートフォン アプリからスマートウォッチにブリッジされます。すでに スタンドアロンの Wear OS アプリと対応するスマートフォン アプリ、重複する通知 発生する可能性があります。たとえば、FCM からの単一の通知は、 両方で別々に表示できます。Google Chat では ブリッジ API を使用することで、この問題を回避できます。

バックグラウンド サービスを使用する

バックグラウンド タスクが正しく実行されるようにするには、 Doze モードとアプリ スタンバイ モードに設定します。

画面がオフになる、またはアンビエント モードが長時間切り替わると、サブセット Doze モードが発生し、バックグラウンド タスクを一定期間遅延させることができます。 その後、デバイスが長時間停止すると、通常の Doze が発生します。 WorkManager API を使用してリクエストをスケジュール設定する。これにより、アプリで登録できるようになります。 Doze モードでコードが実行されるようにします。

制約を含むスケジュールを設定する

制約を使用して、バッテリーを節約するようにリクエストを構成できます。 ありますレポートに含める次の制約を 1 つ以上選択します リクエスト:

  • ネットワークを必要とするリクエストをスケジュールします。

    NetworkTypeCONNECTEDUNMETERED かを指定します。 UNMETERED は大規模なデータ転送に、CONNECTED は小規模なデータ転送に使用します。 できます。

  • 充電中のリクエストのスケジュールを設定できます。

  • デバイスがアイドル状態のときにリクエストをスケジュール設定します。これは バックグラウンド処理や同期の優先順位が低くなります。特に、 デバイスが充電中であることを意味します。

詳しくは、WorkManager の制約が与える影響 定期作業ガイドをご覧ください。