다음 다이어그램은 미디어와 상호 작용하는 구성 요소를 보여줍니다.
그림 1. 시스템 구성 요소
이 그림의 요소는 표에 설명되어 있습니다.
요소 | 설명 |
---|---|
홈 화면 | 현재 재생 중인 미디어를 표시하고 제어하는 자동차 UI의 다른 표면을 나타냅니다. AOSP에서는 시스템이 시작될 때 표시되는 메인 화면입니다. 이 화면에서 사용자는 재생 중인 미디어 항목의 세부 정보를 보고 제한된 표준 및 사용자 정의 작업(예: 재생 및 일시 중지)을 실행할 수 있습니다. |
시스템 UI | 미디어 탐색과 같은 전역 UI 탐색 옵션이 포함된 기능을 제공합니다. |
어시스턴트 | Android는 다양한 음성 지원 앱이 시스템과 상호작용할 수 있는 메커니즘을 제공합니다. 이러한 앱은 백그라운드에서 미디어 소스와 상호 작용하거나(예: 음성 명령의 결과로 노래 재생) 포그라운드에서 미디어로 이동할 수 있습니다(예: 음성 지원 앱에 UI를 표시하도록 지시하는 경우). 특정 미디어 소스). |
앱 런처 | 미디어 소스를 포함한 모든 Android 앱은 앱 실행기에서 시작됩니다. 미디어는 자체 미디어 소스 선택기를 제공하여 미디어 시작 장소인 앱 런처를 보완하거나 대체할 수 있습니다. |
구글 플레이 스토어 | GAS를 사용하는 경우 사용자는 여기에서 Android 기기에서 새 앱을 찾아 설치합니다. 미디어의 경우 앱이 설치되면 사용자는 로그인 프로세스를 완료하거나 앱과 상호 작용을 시작하기 위해 미디어로 이동됩니다. |
미디어 세션 관리자 | 모든 미디어 소스의 미디어 세션을 추적하고 제어하는 Android 시스템 서비스입니다. 미디어 소스가 전경 미디어 소스가 되는 시점을 감지하는 메커니즘을 제공합니다. 미디어 및 현재 재생 중인 미디어 소스(예: 홈 화면)를 표시하는 기타 모든 앱은 미디어 세션 관리자를 사용하여 이러한 이벤트를 감지하고 이에 따라 UI를 업데이트합니다. 미디어 소스는 미디어 세션 API 를 통해 미디어 세션 관리자와 상호 작용합니다. |
라디오 | 라디오 하드웨어와 상호 작용하는 특수 앱입니다. 라디오는 라디오 방송국을 검색하여 최근에 식별된 방송국을 빠르게 선택하고 라디오 대역을 전환합니다. 라디오와 미디어 모두에서 공유되는 UI 구성 요소를 통해 사용자는 두 경험 사이를 전환할 수 있습니다. |
운전자 주의 분산 엔진 | 자동차의 운전 상태에 따라 UX 제한을 적용하는 데 사용되는 Android 시스템 서비스입니다. 미디어 소스 로그인 및 설정 UX(미디어 소스에 의해 화면이 직접 제어되는 경우)의 경우, 이 서비스는 자동차가 운전 중인 상태에서 안전하지 않은 콘텐츠가 표시되지 않도록 보장합니다. OEM은 이러한 상태의 정의와 이러한 상황에서 시스템이 반응하는 방식(예: 차단 화면 오버레이 표시)을 사용자 정의할 수 있습니다. |
사용자 흐름
미디어 앱 출시
미디어를 실행하는 프로세스는 아래와 같습니다.
그림 2. 미디어 앱 실행
미디어는 다음 암시적 CAR_INTENT_ACTION_MEDIA_TEMPLATE
사용하여 실행되어야 합니다. 이 인텐트는 추가 정보 로 다음 정보를 가질 수 있습니다.
android.car.intent.extra.MEDIA_COMPONENT
( 선택 사항 ). 미디어가 연결될 미디어 앱에서MediaBrowserService
의 평면화된 구성 요소 이름을 나타내는 추가 문자열입니다. 제공되지 않은 경우 미디어는 현재 선택된 미디어 앱을 표시합니다. 이 인텐트는 다음 진입점에서 사용됩니다.시스템 UI. 미디어 경험으로 돌아가거나 처음으로 사용을 시작하는 데 사용됩니다. 이 경우 위 인텐트는 추가 항목 없이 사용되어 Media가 현재 선택된 미디어 앱을 표시하도록 합니다.
홈 화면, 보조자 및 알림 센터. 사용자는 미디어로 이동하여 현재 선택된 미디어 앱을 표시할 수 있습니다. 모든 경우에 추가 항목이 없는 암시적 인텐트가 트리거됩니다.
앱 런처. 사용자가 App Launcher에서 미디어 앱을 선택하면 위 인텐트에는 선택한 미디어 앱이 포함된
CAR_EXTRA_MEDIA_COMPONENT
추가 항목이 포함됩니다. 미디어에서는 이를 새로 선택한 앱으로 지정하고 연결합니다. 자세한 내용은 아래 앱 실행기에서 미디어 통합 섹션을 참조하세요.
미디어 통합에 대한 앱 실행기
미디어 앱은 android.intent.category.LAUNCHER
카테고리로 주석이 달린 활동을 제공하는 것이 허용되지 않습니다. 결과적으로 앱 런처(또는 이에 상응하는 것)는 미디어 소스 통합을 처리하기 위해 특수 논리를 구현해야 합니다.
앱 런처는 시스템에서
MediaBrowserService.SERVICE_INTERFACE
구현하는 패키지를 검색해야 합니다. 이러한 패키지의 경우 App Launcher는 다른 활동을 가져오는 데 사용되는 것과 유사한 서비스 아이콘을 가져옵니다.그런 다음 App Launcher는 이러한 패키지를
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 미디어 세션 API를 통해 미디어 앱과 상호작용합니다. 이 API의 일부로 Media는 미디어 앱의 현재 상태를 전달하는 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
와 같습니다. 이는 로그인이 완료될 때까지 다른 작업이 불가능하다는 신호입니다.