github でこの質問を2日間検索しましたが、本当の答えが見つかりません。 pause / resume
でExoPlayer > 2.x
を検出する例が必要です。誰でも私に例を与えることができますか? onPlayerStateChanged
をチェックしましたが、問題は解決していません。
onPlayerStateChanged : STATE_BUFFERING
onPlayerStateChanged : STATE_READY
このログはonPlayerStateChanged
から取得しましたが、これは常に呼び出されるわけではありません!
playWhenReady
を Player.EventListener で確認する必要があります。 ExoPlayerの再生状態 は、一時停止されているプレーヤーとは無関係です:
player.addListener(new Player.DefaultEventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playWhenReady && playbackState == Player.STATE_READY) {
// media actually playing
} else if (playWhenReady) {
// might be idle (plays after prepare()),
// buffering (plays when data available)
// or ended (plays when seek away from end)
} else {
// player paused in any state
}
}
});
ExoPlayerが提供するプレーヤーを再生/一時停止するには
player.setPlayWhenReady(boolean)
再バッファにストールすることのないメディアファイルを使用したExoPlayerでの再生状態のシーケンスは、4つの状態のそれぞれに1回あり、再生/一時停止を表しません。
Player.STATE_IDLE;
Player.STATE_BUFFERING;
Player.STATE_READY;
Player.STATE_ENDED;
プレーヤーがバッファリングする必要があるたびに、次のようになります。
Player.STATE_READY;
Player.STATE_BUFFERING;
Player.STATE_READY;
PlayWhenReadyを設定しても状態には影響しません。
メディアはすべて一緒になって実際に再生されます
playWhenReady && playbackState == Player.STATE_READY
準備ができたら再生します。 :)
この機能を使用できます:
public boolean isPlaying() {
return exoPlayer.getPlaybackState() == Player.STATE_READY && exoPlayer.getPlayWhenReady();
}
exoplayer.getPlayWhenReady()
を使用して、プレーヤーが現在一時停止状態または再生状態にあるかどうかを確認できます。
exoplayerの再生/一時停止ボタンのクリックイベントを検出するのと同じ要件がありました。上記の回答は、主にボタンクリックイベントではなく、状態に関するものでした。
これは、[再生/一時停止]ボタンのクリックを検出するために行ったもので、完璧に機能します。
ステップ1:カスタムコントロールディスパッチャークラスを作成し、メソッドdispatchSetPlayWhenReady
をオーバーライドする
class PlayerControlDispatcher : DefaultControlDispatcher() {
override fun dispatchSetPlayWhenReady(player: Player?, playWhenReady: Boolean): Boolean {
if(playWhenReady) {
// Play button clicked
} else {
// Paused button clicked
}
return super.dispatchSetPlayWhenReady(player, playWhenReady)
}
}
ステップ2:カスタムコントロールディスパッチャークラスPlayerControlDispatcher
をプレーヤービューに設定します。
playerView.setControlDispatcher(PlayerComponentCallback())
PlayerViewは、レイアウトファイルで宣言するcom.google.Android.exoplayer2.ui.PlayerView
のインスタンスです。