다음 다이어그램은 미디어와 상호작용하는 구성요소를 보여 줍니다.
그림 1. 시스템 구성요소
이 그림의 요소는 아래에 설명되어 있습니다.
구성요소 | 설명 |
---|---|
홈 화면 | 현재 재생되는 미디어를 표시하고 제어하는 자동차 UI의 다른 영역을 나타냅니다. AOSP에서는 시스템이 시작될 때 표시되는 기본 화면입니다. 이 화면을 통해 사용자는 재생되는 미디어 항목의 세부정보를 확인하고 제한된 일련의 표준 작업과 맞춤 작업(예: 재생 및 일시중지)을 실행할 수 있습니다. |
시스템 UI | 미디어로 이동과 같은 전역 UI 탐색 옵션이 포함된 기능을 제공합니다. |
어시스턴트 | Android는 다양한 음성 어시스턴트 앱이 시스템과 상호작용할 수 있는 메커니즘을 제공합니다. 이러한 앱은 백그라운드에서 미디어 소스와 상호작용하거나(예: 음성 명령의 결과로 노래 재생) 포그라운드에서 미디어로 이동할 수 있습니다(예: 음성 어시스턴트 앱에 특정 미디어 소스의 UI를 표시하라고 명령할 때). |
앱 런처 | 미디어 소스를 포함한 모든 Android 애플리케이션은 앱 런처에서 시작됩니다. 미디어는 자체 미디어 소스 선택기를 표시하여 앱 런처를 미디어의 시작 위치로 보완하거나 대체할 수 있습니다. |
Google Play 스토어 | GAS를 사용 중일 때 여기에서 사용자가 새 애플리케이션을 찾아 Android 기기에 설치합니다. 미디어의 경우 애플리케이션이 설치되면 사용자는 미디어로 이동하여 로그인 프로세스를 완료하거나 애플리케이션과 상호작용을 시작합니다. |
미디어 세션 관리자 | 모든 미디어 소스의 미디어 세션을 추적하고 제어하는 Android 시스템 서비스입니다. 미디어 소스가 포그라운드 미디어 소스가 되는 시점을 감지하는 메커니즘을 제공합니다. 미디어 및 현재 재생되는 미디어 소스(예: 홈 화면)를 표시하는 다른 모든 애플리케이션은 미디어 세션 관리자를 사용하여 이러한 이벤트를 감지하고 적절하게 UI를 업데이트합니다. 미디어 소스는 Media Session API를 통해 미디어 세션 관리자와 상호작용합니다. |
라디오 | 무선 하드웨어와 상호작용하는 특수 애플리케이션입니다. 라디오는 라디오 채널을 검색하여 최근 식별된 채널을 빠르게 선택하고 라디오 대역 간에 전환합니다. 라디오와 미디어에서 모두 공유하는 UI 구성요소를 통해 사용자는 두 환경 간에 전환할 수 있습니다. |
운전자 주의 분산 행동 엔진 | 자동차의 운전 상태에 기반하여 UX 제한을 적용하는 데 사용되는 Android 시스템 서비스입니다. 미디어 소스 로그인과 설정 UX(미디어 소스에서 직접 화면을 제어하는 경우)의 경우 이 서비스는 자동차가 운전 상태일 때 안전하지 않은 콘텐츠가 표시되지 않도록 합니다. OEM은 이러한 상태의 정의와 시스템이 이와 같은 상황에서 반응하는 방식을 맞춤설정할 수 있습니다(예: 차단 화면 오버레이 표시). |
사용자 흐름
미디어 애플리케이션 실행
미디어가 실행되는 프로세스는 아래에 나와 있습니다.
그림 2. 미디어 애플리케이션 실행
미디어는 다음 암시적 CAR_INTENT_ACTION_MEDIA_TEMPLATE을 사용하여 실행되어야 합니다. 이 인텐트에는 extras로 다음 정보가 포함될 수 있습니다.
-
android.car.intent.extra.MEDIA_COMPONENT
(선택사항). 미디어를 연결할 미디어 애플리케이션에서 MediaBrowserService의 평면화된 구성요소 이름을 나타내는 문자열 extra입니다. 제공되지 않으면 미디어는 현재 선택된 미디어 애플리케이션을 표시합니다. 이 인텐트는 다음 진입점에서 사용됩니다.-
시스템 UI. 미디어 환경으로 돌아가거나 처음 사용하기 시작하는 데 사용됩니다. 이 경우 미디어에서 현재 선택된 미디어 애플리케이션을 표시하도록 하기 위해 위의 인텐트가 어떤 extras도 없이 사용됩니다.
-
홈 화면, 어시스턴트, 알림 센터. 사용자는 미디어로 이동하여 현재 선택된 미디어 애플리케이션을 표시할 수 있습니다. 어떠한 경우든 extras가 없는 암시적 인텐트가 트리거됩니다.
-
앱 런처. 사용자가 앱 런처에서 미디어 애플리케이션을 선택할 때 위의 인텐트에는 선택된 미디어 애플리케이션이 포함된 CAR_EXTRA_MEDIA_COMPONENT extra가 포함됩니다. 미디어는 이를 새로 선택한 애플리케이션으로 지정하고 연결합니다. 자세한 내용은 아래의 미디어 통합 관련 앱 런처 섹션을 참고하세요.
-
미디어 통합 관련 앱 런처
미디어 애플리케이션은 android.intent.category.LAUNCHER
카테고리로 주석이 달린 어떤 활동도 제공할 수 없습니다. 따라서 앱 런처(또는 이에 상응하는 것)는 특수 로직을 구현하여 미디어 소스 통합을 처리해야 합니다.
-
앱 런처는 시스템에서
MediaBrowserService.SERVICE_INTERFACE
를 구현하는 패키지를 검색해야 합니다. 이러한 패키지의 경우 앱 런처는 다른 활동을 가져오는 데 사용되는 것과 유사한 서비스 아이콘을 가져옵니다. -
그런 다음 앱 런처는 이러한 패키지를
android.intent.category.LAUNCHER
활동을 구현하는 패키지와 결합합니다. 애플리케이션이 MediaBrowserService 구현과 런처 활동을 제공하면 서비스가 우선합니다.이 문서 작성 시점부터 어떤 미디어 소스 애플리케이션도 런처 활동을 제공할 수 없습니다.
AppLauncherUtils#getAllLauncherApps().
의 AOSP 코드에서 이 로직의 예를 확인할 수 있습니다.
로그인 흐름 및 구성 옵션
미디어 애플리케이션에는 차량에 최적화된 설정 활동이 포함될 수 있습니다. 이러한 활동은 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 오류 처리의 일부로 미디어는 다음 입력을 확인해야 합니다.
-
PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED
와 동일한PlaybackState
오류 코드입니다. 작업을 계속하려면 미디어 애플리케이션에 로그인이 필요하다고 알립니다. 다른 유형의 오류 상황을 나타내는 다른 오류 코드를 수신할 수도 있습니다. -
PlaybackStateCompat.Builder#setErrorMessage
메서드를 사용하여 미디어 애플리케이션에서 설정된PlaybackState
오류 메시지에는 사람이 읽을 수 있는 설명이 포함됩니다(예: '로그인되어 있지 않습니다'). 이 메시지는 사용자에게 표시해야 하며 운전에 방해가 되지 않도록 최적화(DO)해야 합니다. 자세한 내용은 UX 운전 제한을 참고하세요. -
선택적으로
PlaybackState
는 다음 키와 함께 다음 extras(PlaybackStateCompat.Builder#setExtras 메서드를 사용하여 미디어 애플리케이션에서 설정)를 포함할 수 있습니다.-
android.media.extras.ERROR_RESOLUTION_ACTION_LABEL
는 사람이 읽을 수 있는 메시지가 포함된 문자열에 설정되어 사용자가 로그인 흐름을 시작하려고 터치하는 버튼에 표시됩니다. -
android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
는 PendingIntent를 통해 설정되어 사용자가 위에 언급한 버튼을 클릭할 때 트리거됩니다. 이PendingIntent
는 동일한 미디어 애플리케이션에서 구현된 맞춤 로그인 활동을 가리킵니다.
-
-
PlaybackState
상태는 STATE_ERROR와 같습니다. 로그인이 완료될 때까지 다른 어떤 작업도 할 수 없다고 알립니다.