Media3, bazı özelleştirme seçenekleri sağlayan varsayılan bir PlayerView
sağlar. Daha fazla özelleştirme için uygulama geliştiricilerin kendi kullanıcı arayüzü bileşenlerini uygulaması beklenir.
En iyi uygulamalar
Media3 Player
'e bağlanan bir medya kullanıcı arayüzü (ör. ExoPlayer
, MediaController
veya özel bir Player
uygulaması) uygularken uygulamaların en iyi kullanıcı arayüzü deneyimi için buradaki en iyi uygulamaları izlemesi önerilir.
Oynat/Duraklat düğmesi
Oynat ve duraklat düğmesi tek bir oyuncu durumuna doğrudan karşılık gelmez. Örneğin, kullanıcı sona erdikten veya oynatıcı duraklatılmış olmasa bile oynatma işlemi başarısız olduktan sonra yeniden başlatabilmelidir.
Uygulamayı basitleştirmek amacıyla Media3, hangi düğmenin gösterileceğine (Util.shouldShowPlayButton
) ve basılmasına (Util.handlePlayPauseButtonAction
) karar verilmesi için yardımcı yöntemler sağlar:
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));
Durum güncellemelerini dinleyin
İlgili kullanıcı arayüzü güncellemesi gerektiren durum değişikliklerinden haberdar edilmesi için kullanıcı arayüzü bileşeninin bir Player.Listener
eklemesi gerekir. Ayrıntılar için Oynatma etkinliklerini dinleme bölümüne bakın.
Kullanıcı arayüzünü yenilemek maliyetli olabilir ve genellikle birden fazla oyuncu etkinliği bir araya gelir. Kullanıcı arayüzünün kısa süre içinde çok sık yenilenmesini önlemek için yalnızca onEvents
öğesini dinlemek ve kullanıcı arayüzü güncellemelerini buradan tetiklemek genellikle daha iyidir:
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(); } } });
Kullanılabilir komutları işleme
Farklı Player
uygulamalarıyla çalışması gerekebilecek genel amaçlı bir kullanıcı arayüzü bileşeni, düğmeleri göstermek veya gizlemek ve desteklenmeyen yöntemleri çağırmak için mevcut oynatıcı komutlarını kontrol etmelidir:
Kotlin
nextButton.isEnabled = player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)
Java
nextButton.setEnabled(player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT));