Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

IVI 接続

Android 8.0 は、車載インフォテインメント システム(IVI)へのデバイスの接続に関連する、よりシームレスで利便性の高い Bluetooth 機能を提供します。IVI は、車のドアのロック解除やエンジンの始動などのイベントをリッスンし、範囲内にある Bluetooth デバイスを自動的にスキャンします。また、別のデバイスにも同時接続が可能なため、ユーザーはどのデバイスからでもハンズフリーで通話できます。

Bluetooth 接続管理

Android 7.x 以前では、Bluetooth アダプターの電源が入っている場合にのみ IVI Bluetooth スタックによるデバイスのスキャンが実行されます。IVI Bluetooth がオンの状態でデバイスが範囲内に入った場合も、ユーザーは手動で接続する必要があります。Android 8.0 では、ユーザーが IVI 設定アプリを使用してデバイスを手動で接続する必要がなくなりました。

Bluetooth アダプターがオンの状態でデバイスに接続されていない場合にドアのロック解除やエンジンの始動などのトリガー イベント(カスタマイズ可能)が発生すると、IVI Bluetooth は範囲内のデバイスをスキャンして使用可能なプロファイルとペアリングします。IVI Bluetooth は、優先度リストの最上位のデバイスに接続します。

トリガー イベントに加えて、各プロファイルのデバイスの優先度を指定することができます。デフォルトの実装では、IVI Bluetooth が最後に接続したデバイスが優先されます。Bluetooth サービスごとに個別の優先度リストがあるため、それぞれのサービス プロファイルを異なるデバイスに接続できます。また、Bluetooth サービスの各プロファイルには、異なる接続制限があります。

サービス プロファイル 接続制限
スマートフォン HFP 2
PBAP 2
メッセージ MAP 1
音声 A2DP 1

接続管理の実装

Android 8.0 では、自動接続をサポートするために Bluetooth 接続管理ロジックが Bluetooth サービスから Car Service のポリシーに移動されました。ポリシー内で、Bluetooth 自動接続が新しいデバイスをスキャンするタイミング、および最初に接続を試みるデバイスをカスタマイズできます。

デフォルトの接続ポリシーは、 service/src/com/android/car/BluetoothDeviceConnectionPolicy.java をご覧ください。カスタムの通話ポリシーを使用するには、enable_phone_policyfalse に設定して res/values/config.xml のデフォルトの通話ポリシーを無効にします。

トリガー イベントを作成するには、それぞれのカーサービスにリスナーを登録します。新しいセンサー イベントの例を次に示します。

      /
      * Handles events coming in from the {@link CarSensorService}
      * Upon receiving the event that is of interest, initiate a connection attempt by
      * calling the policy {@link BluetoothDeviceConnectionPolicy}
      */
      private class CarSensorEventListener extends ICarSensorEventListener.Stub {
        @Override
        public void onSensorChanged(List<CarSensorEvent> events) throws RemoteException {
          if (events != null & !events.isEmpty()) {
            CarSensorEvent event = events.get(0);
            if (event.sensorType == CarSensorManager.SOME_NEW_SENSOR_EVENT) {
              initiateConnection();
            }
          ...
      }
    

各プロファイルのデバイスの優先度を設定するには、 BluetoothDeviceConnectionPolicy で次のメソッドを変更します。

  • updateDeviceConnectionStatus()
  • findDeviceToConnect()

接続管理の確認

Android Automotive IVI で Bluetooth を切り替えて Bluetooth 接続管理の動作を確認し、適切なデバイスに自動的に接続できることを確認します。

次の adb コマンドを使用して、シミュレートされた CarCabinManager.ID_DOOR_LOCK イベントで IVI をテストします。

adb shell dumpsys activity service com.android.car inject-vhal-event 0x16200b02 1

Bluetooth マルチデバイス接続

Android 8.0 では、IVI は Bluetooth で同時接続された複数のデバイスをサポートします。Bluetooth 通話サービスのマルチデバイス機能により、ユーザーは個人用のスマートフォンと仕事用のスマートフォンといった異なる 2 台のデバイスを接続し、どちらのデバイスからでもハンズフリー通話を行うことができます。この機能は、運転者が注意散漫になるのを防いで運転中の安全性を高めるとともに、自動車のオーディオ システムを活用して通話の利便性を改善します。

マルチデバイス接続

トリガー イベントが発生すると、Bluetooth 接続管理ポリシーにより、各 Bluetooth プロファイルで接続するデバイスが決定されます。その後、ポリシーはプロファイル クライアント サービスに接続インテントを送信します。次に、プロファイル クライアント サービスはクライアント ステートマシンのインスタンスを作成して、各デバイスとの接続を管理します。

ハンズフリー プロファイル

Android 8.0 の Bluetooth ハンズフリープロファイル(HFP)を使用すると、2 台のデバイスを同時に接続でき、どちらのデバイスからでも電話を発信したり受信したりすることが可能です。同時接続を行うため、各接続では、スマートフォン アカウントを IVI アプリにアドバタイズする Telecom Manager に個別のスマートフォン アカウントが登録されます。

ユーザーがデバイスを使用して電話を発信または受信すると、対応するスマートフォン アカウントによって HfpClientConnection オブジェクトが作成されます。電話アプリは HfpClientConnection オブジェクトとやり取りを行い、通話の受け入れや切断などの通話機能を管理します。ただし、電話アプリでは、着信呼び出しの発信元デバイスを表示しません。発信を行うため、アプリは最後に接続したデバイスを使用します。メーカーは、電話アプリをカスタマイズしてこの動作を変更できます。

電話帳アクセス プロファイル

Bluetooth 電話帳アクセス プロファイル(PBAP)は、接続されたすべてのデバイスから連絡先をダウンロードします。PBAP は、PBAP クライアント ステートマシンによって更新される検索可能な連絡先のリストを集約、保持します。それぞれのデバイスは個別の PBAP クライアント ステートマシンとやり取りを行うため、電話を発信する際に適切なデバイスに連絡先が関連付けられます。PBAP クライアントが切断されると、内部データベースではその電話に関連付けられたすべての連絡先が削除されます。

マルチデバイス HFP の実装

デフォルトの Android Bluetooth スタックを使用すると、IVI は自動的に HFP 上の複数のデバイスに接続できるようになります。 HeadsetClientServiceMAX_STATE_MACHINES_POSSIBLE は、HFP 同時接続の最大数を定義します。

マルチデバイス HFP を実装する場合、電話アプリの UI をカスタマイズして、通話時に使用するデバイス アカウントをユーザーが選択できるようにする必要があります。これにより、アプリは正しいアカウントで telecomManager.placeCall を呼び出します。

マルチデバイス HFP の確認

Bluetooth 経由でマルチデバイス接続が正常に機能していることを確認するには、次の操作を行います。

  1. Bluetooth を使用してデバイスを IVI に接続し、デバイスから音声をストリーミングします。
  2. 2 台のスマートフォンを Bluetooth で IVI に接続します。
  3. 1 台のスマートフォンを選択します。スマートフォンから直接発信し、次に IVI を使用して発信を行います。
    1. どちらの場合も音声のストリーミングが一時停止し、IVI に接続したスピーカーからスマートフォンの音声が再生されることを確認します。
  4. 同じスマートフォンを使用して直接着信を受け、次に IVI を使用して着信を受けます。
    1. どちらの場合も音声のストリーミングが一時停止し、IVI に接続したスピーカーからスマートフォンの音声が再生されることを確認します。
  5. 接続されたもう 1 台のスマートフォンで手順 3 と 4 を繰り返します。