통합 흐름

활성 VIA 선택은 CarSettings의 ManageAssistActivity에 의해 실행됩니다. 이 흐름은 설정 화면의 기본 앱 섹션의 일부로 PackageInstaller 애플리케이션에 의해 트리거됩니다.

설정 화면의 기본 앱

그림 1. 설정 화면의 기본 앱

선택된 VIA는 다음과 같은 두 가지 방법으로 시스템에 노출됩니다.

  1. RolesManager 시스템 서비스의 일부로 노출
  2. AssistUtils 내부 API를 통해 VoiceInteractionManagerService에 의해 노출

VIA 후보 목록은 역할 이름이 android.app.role.ASSISTANTRolesManager를 사용하여 얻을 수 있습니다.

핫워드 트리거

Android는 하드웨어 DSP 위에 추상화로 AlwaysOnHotwordDetector를 제공합니다. 이를 통해 저에너지 상시 사용 설정 음성 인식을 위한 음성 모델에 VoiceInteractionService를 간편하게 연결할 수 있습니다. 이는 사용자가 새 대화를 시작하기 위해 VA(Voice Application)와 상호작용하도록 요청하는 가장 일반적이고 잘 알려진 상호작용 흐름입니다. 이 방법으로 시작된 음성 세션은 SHOW_SOURCE_ASSIST_GESTURE flag로 식별됩니다.

핫워드 트리거

그림 2. 핫워드 트리거

범례: 시스템 서비스는 연한 파란색으로, VIA 구성요소는 녹색으로 표시됩니다.

PTT 트리거

이는 하드웨어 버튼 길게 누르기 또는 짧게 누르기에 적용됩니다. AAOS에서 PTT는 CarInputService에 의해 처리됩니다. 기본 구현에서 이 서비스는 차량 HAL을 통해 수신된 입력 이벤트를 처리하며, 특히 음성 상호작용의 경우 키 이벤트에 다음 로직을 적용합니다.

  • 짧은 PTT 이벤트(KeyEvent.KEYCODE_VOICE_ASSIST)는 VoiceInteractionManagerService에 전달되어 새 음성 세션을 시작합니다.
  • 긴 PTT 이벤트는 먼저 프로젝션 수신기(예: Android Auto 또는 CarPlay)에 전달된 후 블루투스 연결 기기에 전달되고 마지막으로 로컬 VIA 애플리케이션에 전달됩니다.

이 흐름을 사용하여 시작된 세션은 SHOW_SOURCE_PUSH_TO_TALK로 식별됩니다.

PTT 트리거

그림 3. PTT 트리거

하드웨어 음성 제어 버튼을 AAOS에 통합하려면 Automotive 키 입력 통합을 참고하세요.

탭하여 말하기 트리거(또는 소프트웨어 버튼)

시스템 UI에서 음성 상호작용을 트리거하는 것은 AssistUtil을 사용하여 실행됩니다. 이 API는 다음을 활성화하는 시스템 UI와 같은 번들 시스템 애플리케이션에서만 사용할 수 있는 숨겨진 시스템 API입니다.

  • VoiceInteractionManagerService와 상호작용하여 음성 제어 세션 시작
  • 현재 선택된 VIA 확인

선택된 VIA 애플리케이션을 동적으로 표시하기 위해 시스템 UI는 RoleManager를 사용하고 ROLE_ASSISTANT의 역할 보유자에 관한 변경사항을 계속 확인할 수 있습니다. 탭하여 말하기(TTT) 트리거를 구현하는 방법의 예는 CarSystemUI, AssistantButton에서 확인할 수 있습니다.

탭하여 말하기 트리거

그림 4. 탭하여 말하기 트리거

음성 어시스턴트 탭하여 읽기(TTR)

Automotive에서 INBOX 또는 INBOX_IN_GROUP 알림(예: SMS 메시지)으로 식별되며 알림 센터에 게시되는 알림에는 재생 작업 버튼이 포함됩니다. 사용자가 이 버튼을 사용하면 선택된 VIA에서 알림을 소리 내어 읽고 선택적으로 음성으로 답장할 수 있습니다.

알림

그림 5. 알림

이 흐름을 구현하는 방법에 관한 자세한 내용은 메시지 처리 명령어를 참고하세요.

자동차 런처에서 VIA 실행

다른 애플리케이션과 마찬가지로 VIA는 매니페스트에 하나 이상의 런처 활동을 포함할 수 있습니다. 이러한 활동이 실행할 작업을 결정하는 것은 애플리케이션 개발자와 이 애플리케이션의 사전 설치를 수락하는 OEM에 달려 있습니다.

중요: Automotive에서 시스템 활동을 포함한 모든 활동의 경우 운전 중에 UX 제한이 적용됩니다. 런처 아이콘에서 사용 설정하려는 환경을 운전 중에 사용할 수 있어야 한다면 허용 목록에 추가하거나(OEM인 경우) distractionOptimized 메타데이터로 활동에 주석을 지정합니다. 자세한 내용은 운전자 주의 분산 행동 가이드라인을 참고하세요.

DSP 및 오디오 HAL

동시 캡처에서 동시 상시 사용 설정 오디오 녹음 및 오디오 HAL에 관한 업데이트된 가이드라인을 검토하시기 바랍니다. 이러한 API에 대한 액세스는 핫워드에 응답에서 설명한 것처럼 핫워드 감지 성능에 상당한 영향을 줄 수 있습니다.

권한

시스템 독점 권한 부여

사용자가 독점 권한을 부여할 수 없다는 점을 고려할 때 VIA에 독점 권한이 필요하다면 OEM은 시스템 이미지에 APK를 미리 로드하고 빌드에서 이 권한을 명시적으로 부여해야 합니다. 권한 요청을 참고하세요.

이처럼 독점 권한을 부여하려면 다음과 같이 프로젝트에 권한 허용 목록 종속 항목을 추가합니다.

Android.bp

android_app {
     ...
     required: ["privapp_allowlist_com.example.myvoicecontrol"],
     ...
}

다음과 같이 시스템 독점 허용 목록 권한 파일을 yourdata/etc/car 폴더에 추가합니다.

vendor/…/data/etc/car/Android.bp

prebuilt_etc {
    name:privapp_allowlist_com.example.myvoicecontrol",
    sub_dir: "permissions",
    src: "com.example.myvoicecontrol.xml",
    filename_from_src: true,
}

vendor/…/data/etc/car/com.example.myvoicecontrol.xml

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <privapp-permissions package="com.android.car.voicecontrol">
        <permission name="android.permission.MEDIA_CONTENT_CONTROL"/>
    </privapp-permissions>
</permissions>

위험한 권한 사전 부여

권한 요청에 나와 있는 것처럼 VIA가 특정 기능에 액세스하려면 사용자 동의가 필요합니다. 이러한 권한 중 일부는 기본 VoiceInteractionService에 미리 부여됩니다(DefaultPermissionGrantPolicy.java 참고). 기본 핸들러 권한에 관한 자세한 내용은 기본 핸들러에서만 사용되는 권한을 참고하세요. default-permissions.xml 구성 파일을 사용하여 권한을 미리 부여할 수도 있습니다. 권한 사전 부여와 관련된 제한사항에 관한 자세한 내용은 Android 호환성 정의 문서(CDD)의 섹션 9를 참고하세요.

중요: 모든 경우에 기본 VIA에만 이러한 권한이 미리 부여됩니다. 시스템에 VIA가 두 개 이상 미리 로드되어 있다면 기본이 아닌 VIA는 설정의 일부로 또는 처음 사용하는 동안 사용자에게 명시적으로 권한을 요청해야 합니다.

배포(업데이트 사전 설치 및 배포)

사전 설치된 VIA는 /product/priv-apps 또는 /vendor/priv-apps 파티션 및 폴더 아래에 있어야 합니다(파티션 개요제품 파티션 빌드에서 파티션에 관한 자세한 내용 참고).

두 번째 경우에는 공급업체 파티션이 시스템과 별도로 업데이트될 수 있다는 점을 고려할 때 여기에 호스팅되는 애플리케이션은 @hide 시스템 API에 액세스할 수 없습니다. 사전 설치된 애플리케이션의 위치에 따라 업데이트는 OTA(OTA 업데이트 참고) 또는 앱 스토어의 애플리케이션 업데이트를 통해 실행될 수 있습니다.

맞춤설정

Automotive 관련 개념에서 언급했듯이 UI/UX 일관성 및 맞춤설정은 다른 폼 팩터보다 자동차에서 더 중요합니다. 상호 운용성을 극대화하려면 AAOS 자동차 UI 라이브러리를 사용하는 것이 좋습니다. 이 라이브러리에는 OEM이 맞춤설정할 수 있도록 설계된 자동차 애플리케이션에 통합할 수 있는 구성요소 및 리소스가 포함되어 있습니다. 이 라이브러리를 사용하면 각 자동차 모델의 설계에 맞게 UI를 맞춤설정할 수 있는 방식으로 단일 APK를 빌드할 수 있습니다.