시스템 구성요소 및 사용자 흐름

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

시스템 구성요소

그림 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에서 처리되지 않는 사용자 흐름을 구현하는 데 사용될 수 있습니다. 예를 들면 다음과 같습니다.

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

부호-n 흐름

그림 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 와 같습니다. 이는 로그인이 완료될 때까지 다른 작업이 불가능하다는 신호입니다.