시스템 구성요소 및 사용자 플로우

다음 다이어그램은 미디어와 상호작용하는 구성요소를 보여줍니다.

시스템 구성요소

그림 1. 시스템 구성요소

이 그림의 요소는 표에 설명되어 있습니다.

구성요소 설명
홈 화면 현재 재생되는 미디어를 표시하고 제어하는 자동차 UI의 다른 영역을 나타냅니다. AOSP에서는 시스템이 시작될 때 표시되는 기본 화면입니다. 이 화면을 통해 사용자는 재생되는 미디어 항목의 세부정보를 확인하고 제한된 일련의 표준 작업과 맞춤 작업(예: 재생 및 일시중지)을 실행할 수 있습니다.
시스템 UI 미디어로 이동과 같은 전역 UI 탐색 옵션이 포함된 기능을 제공합니다.
어시스턴트 Android는 다양한 음성 어시스턴트 앱이 시스템과 상호작용할 수 있는 메커니즘을 제공합니다. 이러한 앱은 백그라운드에서 미디어 소스와 상호작용하거나(예: 음성 명령의 결과로 노래 재생) 포그라운드에서 미디어로 이동할 수 있습니다(예: 음성 어시스턴트 앱에 특정 미디어 소스의 UI를 표시하라고 명령할 때).
앱 런처 미디어 소스를 포함한 모든 Android 앱은 앱 런처에서 시작됩니다. 미디어는 자체 미디어 소스 선택기를 표시하여 앱 런처를 미디어의 시작 위치로 보완하거나 대체할 수 있습니다.
Google Play 스토어 GAS를 사용할 때 사용자는 여기에서 새 앱을 찾아 설치할 수 있습니다. Android 기기 미디어의 경우 앱이 설치되면 사용자는 미디어로 이동하여 앱과 상호작용을 시작할 수 있습니다.
미디어 세션 관리자 모든 미디어 소스의 미디어 세션을 추적하고 제어하는 Android 시스템 서비스입니다. 미디어 소스가 포그라운드 미디어 소스가 되는 시점을 감지하는 메커니즘을 제공합니다. 미디어 및 현재 재생 중인 미디어 소스를 표시하는 다른 모든 앱( 예를 들어 홈 화면), 미디어 세션 관리자를 사용하여 이러한 이벤트를 감지하고 UI를 업데이트합니다. 변경할 수 있습니다 미디어 소스는 미디어 Session API를 사용합니다.
라디오 라디오 하드웨어와 상호작용하는 특수 앱입니다. 라디오는 라디오 채널을 검색하여 최근 식별된 채널을 빠르게 선택하고 라디오 대역 간에 전환합니다. 라디오와 미디어에서 모두 공유하는 UI 구성요소를 통해 사용자는 두 환경 간에 전환할 수 있습니다.
운전자 주의 분산 행동 엔진 자동차의 운전 상태에 기반하여 UX 제한을 적용하는 데 사용되는 Android 시스템 서비스입니다. 미디어 소스 로그인과 설정 UX(미디어 소스에서 직접 화면을 제어하는 경우)의 경우 이 서비스는 자동차가 운전 상태일 때 안전하지 않은 콘텐츠가 표시되지 않도록 합니다. OEM은 이러한 상태의 정의와 시스템이 이와 같은 상황에서 반응하는 방식을 맞춤설정할 수 있습니다(예: 차단 화면 오버레이 표시).

사용자 플로우

미디어 앱 실행

미디어를 실행하는 프로세스는 아래에 나와 있습니다.

미디어 앱 실행

그림 2. 미디어 앱 실행

미디어는 다음 암시적 CAR_INTENT_ACTION_MEDIA_TEMPLATE입니다. 이 인텐트에는 extras로 다음 정보가 포함될 수 있습니다.

  • android.car.intent.extra.MEDIA_COMPONENT(선택사항). 문자열 추가 항목 평면화된 구성요소 이름을 MediaBrowserService 드림 선택합니다. 입력하지 않으면 미디어가 현재 선택된 미디어 앱입니다. 이 인텐트는 다음에서 사용됩니다. 진입점:

    • 시스템 UI. 미디어 환경으로 돌아가거나 처음 사용하기 시작하는 데 사용됩니다. 이 경우 위의 인텐트는 미디어에 현재 선택된 미디어 앱을 표시합니다.

    • 홈 화면, 어시스턴트, 알림 센터. 사용자는 다음 작업을 할 수 있습니다. 미디어로 이동하여 현재 선택한 미디어 앱을 표시합니다. 어떤 경우든 extras가 없는 암시적 인텐트가 트리거됩니다.

    • 앱 런처. 사용자가 미디어 앱에서 미디어 앱을 선택하면 위의 인텐트에는 CAR_EXTRA_MEDIA_COMPONENT 드림 extra가 생성됩니다. 미디어는 이를 새로운 연결할 수 있습니다 자세한 내용은 아래의 미디어 통합 관련 앱 런처 섹션을 참고하세요.

앱 런처와 미디어 통합

미디어 앱은 android.intent.category.LAUNCHER 카테고리 따라서 앱 런처(또는 이에 상응하는 것)는 특수 로직을 구현하여 미디어 소스 통합을 처리해야 합니다.

  • 앱 런처는 시스템에서 MediaBrowserService.SERVICE_INTERFACE 이러한 패키지의 경우 앱 런처는 다른 활동을 가져오는 데 사용되는 것과 유사한 서비스 아이콘을 가져옵니다.

  • 그런 다음 앱 런처는 이러한 패키지를 android.intent.category.LAUNCHER 활동을 구현하는 패키지와 결합합니다. 앱이 MediaBrowserService 구현 및 런처 활동이 있는 경우 서비스는 우선 적용됩니다

    이 문서를 작성하는 시점에는 어떤 미디어 소스 앱도 런처 활동을 제공할 수 없습니다.

  • 이 로직의 예는 다음 페이지의 AOSP 코드에서 확인할 수 있습니다. AppLauncherUtils#getAllLauncherApps()

로그인 흐름 및 구성 옵션

미디어 앱에는 차량에 최적화된 설정 활동이 포함될 수 있습니다. 이러한 활동은 Android Media API로 처리되지 않은 사용자 흐름을 구현하는 데 사용할 수 있습니다. 예를 들면 다음과 같습니다.

  • 로그인
  • 로그아웃
  • 계정 전환
  • 사용자가 현재 로그인되어 있는 디스플레이(있는 경우)
  • 서비스 구성

로그인 흐름

그림 3. 로그인 흐름

이 설정 활동은 미디어 앱이 다음 인텐트 필터를 사용하여 선언합니다.

<activity android:name=".AppSettingsActivity"
          android:exported="true
          android:theme="@style/SettingsActivity"
           android:label="@string/app_settings_activity_title">
   <intent-filter>
       <action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
   </intent-filter>
</activity>

미디어는 다음 로직을 구현해야 합니다.

  • 현재 선택된 미디어 앱에 주어진 인텐트 필터

  • 포함되어 있다면 사용자가 활동으로 이동하도록 허용합니다.

  • 자동차 UX 제한이 적용되면 (예: 자동차가 움직이는 경우) 이 어포던스는 설정 활동이 운전자 최적화 UI가 아니므로 비활성화될 수 있습니다.

오류 처리 및 필수 로그인

미디어는 Android Media Session API를 통해 미디어 앱과 상호작용합니다. 그 일환으로 API를 사용하면 미디어는 PlaybackState 드림 개체. 이 개체는 미디어 앱의 현재 상태를 전달합니다.

미디어 앱이 변경되면 로그인 프로세스가 시작됩니다. PlaybackState 드림 ~ STATE_ERROR님, 구체적인 오류 코드도 표시됩니다 (아래 세부정보 참고). 이 미디어에 오류 설명과 로그인 활동으로 이동하기 위한 어포던스가 표시됩니다. 미디어 앱에 의해 구현됩니다.

이와 동일한 흐름을 앱에서 다른 오류 상황 (예: 서버 연결 오류).

오류 처리

그림 4. 오류 처리

일반적인 PlaybackState 오류 처리의 일부로 미디어는 다음 입력을 확인해야 합니다.

  • 다음과 같음 PlaybackState 오류 코드 PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED 이 신호는 작업을 계속하려면 미디어 앱에 로그인해야 합니다. 다른 유형의 오류 상황을 나타내는 다른 오류 코드를 수신할 수도 있습니다.

  • PlaybackState 오류 메시지( PlaybackStateCompat.Builder#setErrorMessage 메서드)에는 사람이 읽을 수 있는 설명 (예: '로그인하지 않았습니다.') 이 메시지는 사용자에게 표시해야 하며 운전에 방해가 되지 않도록 최적화(DO)해야 합니다.

  • 선택적으로 PlaybackState에는 다음 추가 항목 (미디어에 의해 설정됨)이 포함될 수 있습니다. PlaybackStateCompat.Builder#setExtras가 포함된 앱 메서드)를 다음 키와 함께 사용할 수 있습니다.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL는 사람이 읽을 수 있는 메시지가 포함된 문자열에 설정되어 사용자가 로그인 흐름을 시작하려고 터치하는 버튼에 표시됩니다.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT 설정 다음 목표: PendingIntent 사용자가 위에 언급된 버튼을 클릭하면 트리거됩니다. 이 PendingIntent 동일한 미디어 앱으로 구현된 맞춤 로그인 활동을 가리킵니다.

  • PlaybackState 상태가 다음과 같음 STATE_ERROR 로그인이 완료될 때까지 다른 어떤 작업도 할 수 없다고 알립니다.