다음 다이어그램은 미디어와 상호작용하는 구성요소를 보여줍니다.
그림 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
로그인이 완료될 때까지 다른 어떤 작업도 할 수 없다고 알립니다.