Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

IVI 연결

Android 8.0은 기기를 IVI(차량용 인포테인먼트 시스템)에 연결할 때보다 원활한 블루투스 사용자 환경을 제공합니다. IVI는 자동차 도어 잠금 해제 또는 엔진 시동 등의 이벤트를 수신하고 자동으로 범위 내 블루투스 기기를 검색합니다. 또한 사용자가 모든 기기에서 핸즈프리 통화를 할 수 있도록 별도의 기기에 동시에 연결됩니다.

블루투스 연결 관리

Android 7.x 및 이전 버전에서 IVI 블루투스 스택은 블루투스 어댑터가 켜져 있을 때만 기기를 검색했습니다. IVI 블루투스가 켜져 있을 때 기기가 범위 내에 있으면 사용자가 수동으로 연결해야 했습니다. Android 8.0에서는 사용자가 IVI 설정 앱을 통해 기기를 수동으로 연결하지 않아도 됩니다.

블루투스 어댑터가 켜져 있고 기기에 연결되지 않은 경우 도어를 잠금 해제하거나 시동을 거는 등의 맞춤 이벤트가 발생하면 IVI 블루투스가 범위 내 기기를 스캔하여 사용 가능한 프로필과 페어링합니다. IVI 블루투스는 우선순위 목록을 사용하여 연결할 기기를 결정합니다.

트리거 이벤트 외에도 각 프로필에 대해 기기 우선순위를 지정할 수 있습니다. 기본 구현에서 IVI 블루투스는 최근에 연결한 기기의 우선순위를 지정합니다. 블루투스 서비스마다 별도의 우선순위 목록이 있으므로 각 서비스 프로필을 다른 기기에 연결할 수 있습니다. 또한 각 블루투스 서비스 프로필은 연결 제한도 다릅니다.

서비스 프로필 연결 제한
전화 HFP 2
PBAP 2
메시지 MAP 1
오디오 A2DP 1

연결 관리 구현

Android 8.0에서 자동 연결을 지원하기 위해 블루투스 연결 관리 로직이 블루투스 서비스에서 자동차 서비스 정책으로 이전되었습니다. 정책 내에서 블루투스 자동 연결이 새 기기를 검색해야 하는 시점과 연결할 기기를 먼저 맞춤설정할 수 있습니다.

기본 연결 정책은 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에서 블루투스를 전환하여 블루투스 연결 관리 동작을 확인하고 자동으로 적절한 기기에 연결되는지 확인합니다.

다음 adb 명령어를 사용하여 시뮬레이션된 CarCabinManager.ID_DOOR_LOCK 이벤트를 사용해 IVI를 테스트할 수 있습니다.

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

블루투스 멀티 기기 연결

Android 8.0에서 IVI는 블루투스를 통해 동시에 연결된 여러 기기를 지원할 수 있습니다. 멀티 기기 블루투스 전화 서비스를 사용하면 사용자가 개인 스마트폰이나 직장 전화와 같은 별도의 기기를 연결하고 어느 기기에서든 핸즈프리 통화를 할 수 있습니다. 이 기능은 운전 방해를 줄여 주행 시 안전을 강화하고, 자동차 오디오 시스템을 활용하여 통화 환경을 개선합니다.

멀티 기기 연결

트리거 이벤트가 발생하면 블루투스 연결 관리 정책에 따라 각 블루투스 프로필에 연결할 기기가 결정됩니다. 그런 다음 정책은 프로필 클라이언트 서비스에 연결 인텐트를 보냅니다. 프로필 클라이언트 서비스는 클라이언트 상태 시스템 인스턴스를 만들어 각 기기와의 연결을 관리합니다.

핸즈프리 프로필

Android 8.0의 블루투스 HFP(핸즈프리 프로필)은 두 개의 기기를 동시에 연결하며 두 기기는 전화를 걸거나 받을 수 있습니다. 이렇게 하려면 각 연결이 Telecom Manager와 별도의 전화 계정을 등록하는데, 그러면 IVI 앱에 전화 계정을 알립니다.

사용자가 기기에서 전화를 걸거나 받으면 해당 전화 계정에서 HfpClientConnection 객체를 만듭니다. 다이얼러 앱은 HfpClientConnection 객체와 상호작용하여 통화 수락, 통화 끊기 등의 통화 기능을 관리합니다. 하지만 다이얼러 앱에서 수신 전화가 걸려오는 기기를 알 수 없습니다. 전화를 걸려면 다이얼러 앱에서는 마지막으로 연결된 기기를 사용합니다. 제조업체는 다이얼러 앱을 맞춤 설정하여 이 동작을 변경할 수 있습니다.

전화번호부 액세스 프로필

블루투스 PBAP(전화번호부 액세스 프로필)는 연결된 모든 기기에서 연락처를 다운로드합니다. PBAP는 PBAP 클라이언트 상태 시스템에서 업데이트하는 연락처의 검색 가능한 집계 목록을 보관합니다. 각 기기는 별도 PBAP 클라이언트 상태 시스템과 상호 작용하기 때문에 전화를 걸 때 연락처가 적절한 기기와 연결됩니다. PBAP 클라이언트가 연결을 끊으면 내부 데이터베이스에서 해당 전화와 연결된 모든 연락처를 삭제합니다.

멀티 기기 HFP 구현

기본 Android 블루투스 스택을 사용하면 IVI가 HFP의 여러 기기에 자동으로 연결할 수 있습니다. HeadsetClientServiceMAX_STATE_MACHINES_POSSIBLE은 동시 HFP 연결의 최대 수를 정의합니다.

멀티 기기 HFP를 구현하는 경우 사용자가 전화를 걸 때 사용할 기기 계정을 선택하도록 다이얼러 앱 UI를 맞춤 설정해야 합니다. 그러면 앱은 올바른 계정으로 telecomManager.placeCall을 호출합니다.

멀티 기기 HFP 확인

블루투스를 통해 멀티 기기 연결이 제대로 작동하는지 확인하는 방법은 다음과 같습니다.

  1. 블루투스를 사용하여 기기를 IVI에 연결하고 기기에서 오디오를 스트리밍합니다.
  2. 블루투스를 통해 스마트폰 두 대를 IVI에 연결합니다.
  3. 스마트폰 한 대를 선택합니다. 스마트폰에서 직접 전화를 걸고 IVI를 사용하여 전화를 겁니다.
    1. 두 번 모두 스트리밍된 오디오 일시 중지를 확인하고 IVI 연결 스피커로 스마트폰 오디오를 재생합니다.
  4. 동일한 스마트폰을 사용하여 스마트폰에서 직접 수신 전화를 받고 IVI를 사용하여 수신 전화를 받습니다.
    1. 두 번 모두 오디오 스트리밍 일시 중지를 확인하고 IVI 연결 스피커로 스마트폰 오디오를 재생합니다.
  5. 연결된 다른 스마트폰에서 3단계와 4단계를 반복합니다.