미디어 앱을 자동차용 Android로 확장

Android Auto 또는 Android Automotive OS를 실행하는 차량에 앱을 제공하세요. 모든 사용자가 앱을 즐길 수 있도록 두 경우에 모두 적합한 앱 아키텍처를 사용하면 됩니다.

자동차용 Android란 무엇인가요?

자동차용 미디어 앱은 사용자가 디지털 생활을 자동차와 원활하게 연결할 수 있는 방법을 제공할 수 있습니다. 휴대전화용 앱을 자동차에서도 사용할 수 있도록 확장하면 더 나은 사용자 환경을 만들 수 있습니다. Android Auto 또는 Android Automotive OS와 통합하면 됩니다.

자동차용 Android 앱은 무엇보다도 운전자의 주의가 산만해지지 않도록 해야 합니다. 음성 명령 및 매우 실용적인 시각적 디자인 사용 등 권장사항을 준수하여 운전자를 방해하는 요소를 최소화할 수 있습니다. 이렇게 하면 미디어 앱이 관련성이 있을 때만 운전자에게 시의적절한 정보를 표시하고 일반적인 작업에 예측 가능한 패턴을 사용할 수 있습니다.

Android Auto

Android Auto는 Android Auto 앱이 설치된 Android 휴대전화를 보유하고 호환되는 자동차 또는 애프터마켓 스테레오 시스템을 보유한 사용자에게 운전자에 최적화된 앱 환경을 제공합니다. 휴대전화를 연결하여 자동차 디스플레이에서 직접 앱을 사용할 수 있습니다. Android Auto가 운전자에 최적화된 인터페이스를 운전자에게 표시하는 서비스를 만들어서 Android Auto와 스마트폰 앱을 연결할 수 있습니다.

Android Automotive OS

Android Automotive OS는 차량에 내장된 Android 기반의 인포테인먼트 시스템입니다. 자동차의 시스템은 운전에 최적화된 독립형 Android 지원 기기입니다. Android Automotive OS를 사용하면 사용자가 휴대전화 대신 자동차에 직접 앱을 설치할 수 있습니다.

지원되는 앱 카테고리

미디어 앱을 사용하면 사용자는 자동차에서 음악, 라디오, 오디오북 및 기타 오디오 콘텐츠를 탐색하고 재생할 수 있습니다. 자세한 내용은 자동차용 오디오 재생 앱 빌드를 참고하세요. 자세한 내용은 자동차용 미디어 앱 빌드를 참고하세요.

미디어 앱은 MediaLibraryServiceMediaSession를 사용하여 빌드됩니다. Android Automotive OS에서 뷰 또는 Compose를 사용하여 (주차 중에 사용할) 로그인 및 설정 화면을 빌드할 수도 있습니다.

동영상 앱을 사용하면 사용자는 자동차가 주차되어 있는 동안 스트리밍 동영상을 볼 수 있습니다. 이러한 앱의 핵심 목적은 스트리밍 동영상을 표시하는 것입니다. 이러한 앱은 뷰 또는 Compose를 사용하여 빌드됩니다. 자세한 내용은 Android Automotive OS용 동영상 재생 앱 빌드를 참고하세요. 자세한 내용은 Android Automotive OS용 동영상 앱 빌드를 참고하세요.

자동차용 오디오 재생 앱 빌드

이 가이드에서는 이미 기본 미디어 재생 앱이 있다고 가정합니다. 앱이 없는 경우 시작하려면 기본 미디어 플레이어 앱 만들기로 이동하세요.

이 가이드에서는 구체적인 안내가 포함된 추가 리소스 링크를 비롯하여 취해야 할 조치에 관한 정보를 제공합니다.

재생 구성요소

Media3는 재생 사용 사례를 위한 몇 가지 주요 구성요소를 제공합니다. 이전 Android 미디어 라이브러리를 사용해 본 적이 있다면 이러한 구성요소를 구성하는 클래스가 익숙할 것입니다.

다음 다이어그램은 이러한 구성요소가 일반적인 앱에서 어떻게 결합되는지 보여줍니다.

Media3를 사용하는 미디어 앱의 여러 구성요소는 인터페이스와 클래스를 공유하므로 여러 가지 간단한 방법으로 서로 연결됩니다.
그림 1: 미디어 앱 구성요소

자세한 내용은 재생 구성요소를 참고하세요.

MediaLibraryServiceMediaLibrarySession 구현

MediaLibraryService는 미디어 라이브러리를 제공하고 액세스를 허용하는 표준화된 API를 제공합니다. 이는 미디어 앱에 Android Auto 또는 Android Automotive OS 지원을 추가할 때 필요합니다. 이러한 플랫폼은 미디어 라이브러리에 자체 운전자 안전 UI를 제공하기 때문입니다. MediaLibraryService 구현 및 사용에 관한 자세한 내용은 MediaLibraryService로 콘텐츠 제공을 참고하세요.

재생 컨트롤에는 미디어 세션을 사용하세요. MediaSession API는 오디오 또는 동영상 플레이어와 상호작용할 보편적인 방법을 제공합니다. Jetpack Media3 라이브러리에는 MediaSession를 확장하여 콘텐츠 탐색 API를 추가하는 MediaLibrarySession가 포함되어 있습니다.

미디어 세션을 플레이어에 연결하면 앱이 미디어 재생을 외부에 광고하고 Android Auto, Android Automotive OS, Google 어시스턴트와 같은 외부 소스에서 재생 명령을 수신할 수 있습니다. 자세한 내용은 MediaSession을 사용하여 재생 제어 및 광고MediaLibrarySession 사용을 참고하세요.

미디어 세션은 최소한 다음 플레이어 명령어에 대한 지원을 선언해야 합니다.

재생 컨트롤 사용 설정 가이드에서는 자동차에서 재생 컨트롤을 맞춤설정하는 방법을 설명합니다.

Android Auto 또는 Android Automotive OS가 앱에 연결되면 표시할 콘텐츠 라이브러리를 요청하여 onGetLibraryRoot() 콜백 메서드를 트리거합니다. 루트 미디어 항목을 빠르게 반환하여 라이브러리에 액세스할 수 있습니다. onGetChildren() 콜백 메서드는 Android Auto 또는 Android Automotive OS가 콘텐츠 라이브러리의 더 깊은 수준을 탐색하려고 할 때 호출됩니다.

이러한 플랫폼은 콘텐츠 라이브러리의 구조에 추가 제한사항을 적용합니다. 콘텐츠 라이브러리의 표시 방식을 맞춤설정하는 방법에 관한 자세한 내용은 미디어 브라우저 서비스 만들기 가이드를 참고하세요.

Android Auto 지원 선언

다음 매니페스트 항목을 사용하여 전화 앱에서 Android Auto를 지원한다는 것을 선언하세요.

<application>
    ...
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

이 매니페스트 항목은 앱에서 지원하는 자동차 기능을 선언한 XML 파일을 가리킵니다. 미디어 앱이 있음을 나타내려면 automotive_app_desc.xml이라는 XML 파일을 프로젝트의 res/xml/ 디렉터리에 추가합니다. 이 파일에는 다음 내용이 포함되어야 합니다.

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Android Automotive OS 지원 선언

앱의 모든 로직을 Automotive 앱과 공유할 수 있는 것은 아니므로 Automotive 모듈을 만들어야 합니다. 매니페스트와 같은 Android Automotive OS의 일부 구성요소에는 플랫폼별 요구사항이 있습니다. 이러한 구성요소의 코드를 프로젝트의 다른 코드(예: 모바일 앱에 사용된 코드)와 별개로 유지할 수 있는 모듈을 만듭니다.

프로젝트에 자동차 모듈을 추가하려면 다음 단계를 따르세요.

  1. Android 스튜디오에서 File > New > New Module을 클릭합니다.
  2. Automotive Module을 선택하고 Next를 클릭합니다.
  3. Application/Library name을 입력합니다. 이것은 Android Automotive OS에서 사용자에게 표시되는 앱의 이름입니다.
  4. Module name을 입력합니다.
  5. Package name이 앱과 일치하도록 조정합니다.
  6. Minimum SDK에서 API 28: Android 9.0 (Pie)을 선택하고 Next를 클릭합니다.

    Android Automotive OS를 지원하는 모든 자동차는 Android 9(API 수준 28) 이상에서 실행되므로 이 값을 선택하면 호환되는 모든 자동차가 타겟팅됩니다.

  7. No Activity를 선택하고 Finish를 클릭합니다.

Android 스튜디오에서 모듈을 만든 후 새 자동차 모듈에서 AndroidManifest.xml을 엽니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

application 요소에는 일부 표준 앱 정보와 Android Automotive OS 지원을 선언하는 uses-feature 요소가 있습니다. 매니페스트에 선언된 활동은 없습니다.

설정 또는 로그인 활동을 구현한다면 여기에 추가합니다. 이러한 활동은 명시적 인텐트를 사용하여 시스템에서 트리거하며 Android Automotive OS 앱의 매니페스트 내에서 선언하는 유일한 활동입니다.

설정 또는 로그인 활동을 추가한 후 application 요소에서 android:appCategory="audio" 속성을 설정하고 다음 uses-feature 요소를 추가하여 매니페스트 파일을 완성합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

이러한 기능을 required="false"로 명시적으로 설정하면 앱이 Automotive OS 기기에서 사용할 수 있는 하드웨어 기능과 충돌하지 않습니다.

다음 매니페스트 항목을 사용하여 앱에서 Android Automotive OS를 지원한다고 선언합니다.

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

이 매니페스트 항목은 앱에서 지원하는 자동차 기능을 선언하는 XML 파일을 참조합니다.

미디어 앱이 있음을 나타내려면 automotive_app_desc.xml이라는 XML 파일을 프로젝트의 res/xml/ 디렉터리에 추가합니다. 이 파일에 다음 콘텐츠를 포함합니다.

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

인텐트 필터

Android Automotive OS는 명시적 인텐트를 사용하여 미디어 앱에서 활동을 트리거합니다. CATEGORY_LAUNCHER 또는 ACTION_MAIN 인텐트 필터가 있는 활동은 매니페스트 파일에 포함하지 마세요.

다음 예와 같은 활동은 일반적으로 휴대전화 또는 다른 일부 휴대기기를 타겟팅합니다. 이러한 활동은 Android Automotive OS 앱을 빌드하는 모듈이 아니라 휴대전화 앱을 빌드하는 모듈에서 선언합니다.

<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>

추가 단계

이제 Android Auto 및 Android Automotive OS용 앱이 있으므로 운전 중에 더 안전하게 사용할 수 있도록 앱을 최적화하는 추가 단계를 수행할 수 있습니다. 안전하고 편리한 사용자 환경을 보장하는 데 도움이 되는 추가 권장사항은 음성 작업, 방해 방지 수단, 오류 처리에 관한 기술 가이드를 참고하세요.

Android Automotive OS용 동영상 재생 앱 빌드

동영상 앱은 자동차의 미디어 앱과 별도로 분류되므로 Android Automotive OS용 주차 앱 빌드Android Automotive OS용 동영상 앱 빌드에 설명된 대로 동영상 앱에 관한 몇 가지 특정 요구사항을 알아야 합니다. 다음 안내를 따라야 합니다.

앱을 동영상 앱으로 표시

앱이 동영상을 지원한다고 나타내려면 automotive_app_desc.xml이라는 XML 파일을 프로젝트의 res/xml/ 디렉터리에 추가합니다. 이 파일에는 다음 콘텐츠가 포함되어야 합니다.

<automotiveApp>
    <uses name="video"/>
</automotiveApp>

그런 다음, 매니페스트의 application 요소 내에 XML 파일을 참조하는 다음 meta-data 요소를 추가합니다.

<meta-data android:name="com.android.automotive"
    android:resource="@xml/automotive_app_desc"/>