Media3은 일부 맞춤설정 옵션을 제공하는 기본 PlayerView
를 제공합니다. 추가 맞춤설정을 위해서는 앱 개발자가 자체 UI 구성요소를 구현해야 합니다.
권장사항
Media3 Player
에 연결되는 미디어 UI (예: ExoPlayer
, MediaController
또는 맞춤 Player
구현)를 구현할 때 앱은 최상의 UI 환경을 위해 다음 권장사항을 따르는 것이 좋습니다.
재생/일시중지 버튼
재생 및 일시중지 버튼이 단일 플레이어 상태와 직접적으로 일치하지 않습니다. 예를 들어 사용자는 플레이어가 일시중지되지 않았더라도 재생이 종료되거나 실패한 후에 재생을 다시 시작할 수 있어야 합니다.
구현을 간소화하기 위해 Media3은 표시할 버튼 (Util.shouldShowPlayButton
)과 버튼 누르기 처리(Util.handlePlayPauseButtonAction
)를 결정하는 util 메서드를 제공합니다.
Kotlin
val shouldShowPlayButton: Boolean = Util.shouldShowPlayButton(player) playPauseButton.setImageDrawable(if (shouldShowPlayButton) playDrawable else pauseDrawable) playPauseButton.setOnClickListener { Util.handlePlayPauseButtonAction(player) }
Java
boolean shouldShowPlayButton = Util.shouldShowPlayButton(player); playPauseButton.setImageDrawable(shouldShowPlayButton ? playDrawable : pauseDrawable); playPauseButton.setOnClickListener(view -> Util.handlePlayPauseButtonAction(player));
상태 업데이트 수신 대기
상응하는 UI 업데이트가 필요한 상태 변경을 알리려면 UI 구성요소는 Player.Listener
를 추가해야 합니다. 자세한 내용은 재생 이벤트 수신을 참고하세요.
UI를 새로고침하는 데는 비용이 많이 들 수 있으며 여러 플레이어 이벤트가 함께 전달되는 경우가 많습니다. 짧은 시간 내에 UI가 너무 자주 새로고침되지 않도록 하려면 일반적으로 onEvents
만 수신 대기하고 거기서 UI 업데이트를 트리거하는 것이 좋습니다.
Kotlin
player.addListener(object : Player.Listener{ override fun onEvents(player: Player, events: Player.Events){ if (events.containsAny( Player.EVENT_PLAY_WHEN_READY_CHANGED, Player.EVENT_PLAYBACK_STATE_CHANGED, Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) { updatePlayPauseButton() } if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED)) { updateRepeatModeButton() } } })
Java
player.addListener(new Player.Listener() { @Override public void onEvents(Player player, Player.Events events) { if (events.containsAny( Player.EVENT_PLAY_WHEN_READY_CHANGED, Player.EVENT_PLAYBACK_STATE_CHANGED, Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) { updatePlayPauseButton(); } if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED)) { updateRepeatModeButton(); } } });
사용 가능한 명령어 처리
다양한 Player
구현과 호환되어야 할 수도 있는 범용 UI 구성요소는 사용 가능한 플레이어 명령어를 확인하여 버튼을 표시하거나 숨기고 지원되지 않는 메서드의 호출을 피해야 합니다.
Kotlin
nextButton.isEnabled = player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)
Java
nextButton.setEnabled(player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT));