Now Playing 카드 표시

TV 앱은 런처 또는 백그라운드에서 미디어를 재생할 때 Now Playing 카드를 표시해야 합니다. 이 카드를 통해 사용자는 현재 미디어를 재생 중인 앱으로 돌아갈 수 있습니다.

활성 MediaSession가 있으면 Android 프레임워크는 홈 화면에 Now Playing 카드를 표시합니다. 이 카드에는 앨범아트, 제목, 앱 아이콘과 같은 미디어 메타데이터가 포함되어 있습니다. 사용자가 카드를 선택하면 시스템에서 앱을 엽니다.

MediaSession 클래스를 사용하여 Now Playing 카드를 구현할 수 있습니다.

그림 1. 백그라운드에서 미디어를 재생할 때 Now Playing 카드가 표시됩니다.

Now Playing 카드

미디어 세션을 구현하고 세션을 활성으로 설정하고 오디오 포커스를 요청하면 Now Playing 카드가 표시됩니다.

참고: Now Playing 카드는 FLAG_HANDLES_TRANSPORT_CONTROLS 플래그가 설정된 미디어 세션에만 표시됩니다. 이 플래그는 API 수준 26에서 지원 중단되었습니다. 그러나 이전 버전과의 호환성을 위해 이전 기기에서도 이 플래그가 필요할 수 있습니다.

setActive(false) 호출이 미디어 세션을 비활성화하거나 다른 앱이 미디어 재생을 시작하면 카드가 런처 화면에서 삭제됩니다. 재생이 완전히 중지되고 활성 미디어가 없으면 즉시 미디어 세션을 비활성화합니다. 재생이 일시중지된 경우 지연(일반적으로 5~30분) 후 미디어 세션을 비활성화합니다.

카드 업데이트

앱이 MediaSession에서 재생 상태를 업데이트할 때마다 Now Playing 카드가 업데이트되어 현재 미디어의 상태가 표시됩니다. 방법을 알아보려면 재생 상태 업데이트를 참고하세요.

마찬가지로 앱은 MediaMetadata를 업데이트하여 제목, 부제목, 다양한 아이콘 등 현재 미디어에 관한 정보를 Now Playing 카드에 제공할 수 있습니다. 방법을 알아보려면 미디어 메타데이터 업데이트를 참고하세요.

사용자 작업에 반응

사용자가 Now Playing 카드를 선택하면 시스템에서 세션을 소유한 앱을 엽니다. 앱이 setSessionActivity()PendingIntent를 제공하면 시스템은 다음 코드 스니펫과 같이 개발자가 지정한 활동을 실행합니다. 그렇지 않으면 기본 시스템 인텐트가 열립니다. 지정한 활동은 사용자가 재생을 일시중지하거나 중지할 수 있는 재생 컨트롤을 제공해야 합니다.

Kotlin

val pi: PendingIntent = Intent(context, MyActivity::class.java).let { intent ->
    PendingIntent.getActivity(
            context, 99 /*request code*/,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT
    )
}
session.setSessionActivity(pi)

Java

Intent intent = new Intent(context, MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 99 /*request code*/,
        intent, PendingIntent.FLAG_UPDATE_CURRENT);
session.setSessionActivity(pi);