コンパニオン デバイス プロファイル

Android 12 で導入されたコンパニオン デバイス プロファイルは、コンパニオン デバイス(スマートウォッチなど)の種類に固有の権限セットをコンパニオン アプリからリクエストできるようにする機能です。コンパニオン デバイス プロファイルを使用すると登録プロセスがシンプルになる理由は、モバイル デバイスのユーザーに権限リクエストのプロンプトを個別に何度も表示する代わりに、定義された権限セットのリクエストを一つのプロンプトで表示できるためです。これにより、コンパニオン アプリのセットアップ フローがスムーズになり、オプトイン率も向上します。

コンパニオン デバイス プロファイルを使用するには、コンパニオン アプリは次の要件を満たしていなければなりません。

  • コンパニオン デバイス(スマートウォッチなど)を管理する。
  • コンパニオン デバイス プロファイルに定義されているすべての権限を必要とするアプリ機能または Android API の呼び出し。

それぞれのコンパニオン デバイス プロファイルは Android ロールに対応します。各プロファイルの権限と対応する Android ロールの詳細については、サードパーティ製アプリ向けのコンパニオン デバイス プロファイルをご覧ください。

コンパニオン デバイスの詳細については、コンパニオン デバイスのペア設定をご覧ください。

デバイスの動作

このセクションでは、コンパニオン デバイス プロファイルが使用されている場合のデバイスの動作について説明します。

ユーザーがコンパニオン デバイスとの関連付けを求めるアプリのリクエストを承認すると、CompanionDeviceManager(CDM)サービスはデバイス プロファイル ロール(スマートウォッチなど)をコンパニオン アプリに割り当て、そのプロファイル ロールに定義された権限をすべて付与します。図 1 は、COMPANION_DEVICE_WATCH デバイス プロファイルの権限をリクエストするアプリの例を示しています。

スマートウォッチのデバイス プロファイルのダイアログ プロンプト

図 1. スマートウォッチのデバイス プロファイルの権限をリクエストするダイアログ

ユーザーが設定でパッケージ データを消去するか、コンパニオン アプリですべてのデバイスを削除すると、アプリがフォアグラウンドで実行されていないか、フォアグラウンド サービスが実行されていないときに、CDM はプロファイルを取り消します。プロファイルを取り消すと、プロファイルに定義されているすべての権限も取り消されます。

ユーザーは、特定のデバイス プロファイルに関する権限付与リクエストを承認してアプリにそれを付与した後で、個別に権限を取り消すことができます。ユーザーが権限を一つ取り消しても、アプリはコンパニオン デバイスに関連付けられたままですが、なんらかの機能が使用できなくなる可能性があります。その権限がアプリの動作に必要な場合は、アプリから通常の権限リクエストでその権限をリクエストする必要があります。

サードパーティ製アプリ向けのコンパニオン デバイス プロファイル

スマートウォッチ プロファイル

スマートウォッチ プロファイルは Android 12 で導入されました。

次の表に、COMPANION_DEVICE_WATCH デバイス プロファイル ロールに定義済みの権限とそれを使用するための要件を示します。

権限 コンパニオン アプリとデバイスの要件
通知

POST_NOTIFICATIONS (added in Android 15)
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 通知を表示できる画面がある(画面の代わりに接触センサーを使用するデバイスを除く)
  • ユーザー向けの通知機能がある(コンパニオン デバイスの画面にスマートフォンの通知を表示するなど)
  • デバイス管理のためのスマートフォンの通知を投稿(スマートウォッチが接続されたときや特定の機能が有効になったときなど)
Phone
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • マイクとスピーカーを内蔵し、音声通話が可能である
  • 画面に発信者情報が表示される
  • ユーザー向けの通話機能がある(コンパニオン アプリが通話を中継)
SMS
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • SMS メッセージを表示する画面がある
  • ユーザー向けの SMS 機能がある
Contacts
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 表示画面がある
  • 通話機能またはメッセージ機能の一貫として連絡先情報を使用する
Calendar
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 表示画面がある
  • スマートウォッチにユーザー向けのカレンダー機能がある
Nearby devices
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 表示画面がある
  • スマートウォッチにユーザー向けのペアセット機能や接続機能がある
eSIM provisioning
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 表示画面がある
  • スマートウォッチに携帯通信会社の加入者向けサービスを管理するユーザー向けの機能がある
Managing ongoing calls
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • マイクとスピーカーを内蔵し、音声通話が可能である
  • 画面に発信者情報が表示される
  • ユーザー向けの通話機能がある(コンパニオン アプリが通話を中継)

グラス プロファイル

グラス プロファイルは Android 14 で導入されました。

次の表に、COMPANION_DEVICE_GLASSES デバイス プロファイル ロールに定義済みの権限とそれを使用するための要件を示します。

権限 コンパニオン アプリとデバイスの要件
通知

POST_NOTIFICATIONS
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 通知を表示できる画面がある(画面の代わりに接触センサーを使用するデバイスを除く)
  • ユーザー向けの通知機能がある(コンパニオン デバイスの画面にスマートフォンの通知を表示するなど)
  • デバイス管理のためのスマートフォンの通知を投稿(グラスが接続されたときや特定の機能が有効になったときなど)
Phone
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • マイクとスピーカーを内蔵し、音声通話が可能である
  • 画面に発信者情報が表示される
  • ユーザー向けの通話機能がある(コンパニオン アプリが通話を中継)
SMS
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • SMS メッセージを表示する画面がある
  • ユーザー向けの SMS 機能がある
Contacts
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 表示画面がある
  • 通話機能またはメッセージ機能の一貫として連絡先情報を使用する
Microphone
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 表示画面がある
  • グラス上でユーザー向けのマイク体験を提供
Nearby devices
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • 表示画面がある
  • グラス上でユーザー向けのペア設定 / 接続体験を提供
Managing ongoing calls
  • Bluetooth と Wi-Fi の両方または一方を使用して接続されているデバイスである
  • マイクとスピーカーを内蔵し、音声通話が可能である
  • 画面に発信者情報が表示される
  • ユーザー向けの通話機能がある(コンパニオン アプリが通話を中継)

実装

サードパーティ デベロッパーが DEVICE_PROFILE_WATCH プロファイルをリクエストするコンパニオン アプリを実装する場合の手順は次のとおりです。

  1. setDeviceProfile メソッドを呼び出します。

  2. プロファイルに渡します(AssociationRequest をビルドする際に、DEVICE_PROFILE_WATCH など)。

デバイス メーカーが独自のデバイスを使用するコンパニオン アプリを実装する場合、以下のように必要な Android システム設定を使用してコンパニオン アプリを認証し、アプリでユーザーへの同意ダイアログの表示をスキップできるようにします。

  1. 次のコマンドで証明書を取得します。

    keytool  -printcert -jarfile PATH/TO/APK
    
  2. 構成ファイル内でパッケージ名と証明書を次のサンプル入力のように置き換えます。

    <!-- A list of packages managing companion device(s) by the same manufacturers as the main device.
    It will not create the association without prompting if the association has been called multiple
    times in a short period. Note that config_companionDeviceManagerPackage and config_companionDeviceCerts
    are parallel arrays. -->
    
    <string-array name="config_companionDevicePackages" translatable="false">
        <item>YOUR_COMPANION_APP_PACKAGE_NAME</item>
    </string-array>
    
    <!-- A list of SHA256 Certificates managing companion device(s) by the same manufacturers as the
    main device. It will fall back to showing a prompt if the association has been called multiple
    times in a short period. Note that config_companionDeviceCerts and config_companionDeviceManagerPackage
    are parallel arrays.
    Example: "1A:2B:3C:4D" -->
    
    <string-array name="config_companionDeviceCerts" translatable="false">
        <item>YOUR_COMPANION_APP_CERTIFICATE</item>
    </string-array>
    
  3. AssociationRequest を使用して、1 つのコンパニオン デバイスに関連付けリクエストを発行します。

検証

コンパニオン デバイス プロファイル機能の動作をテストするには、cts/tests/tests/companion/ で CTS テストを実施します。