web-dev-qa-db-ja.com

ExoPlayerで一時停止/再開を検出する

github でこの質問を2日間検索しましたが、本当の答えが見つかりません。 pause / resumeExoPlayer > 2.xを検出する例が必要です。誰でも私に例を与えることができますか? onPlayerStateChangedをチェックしましたが、問題は解決していません。

onPlayerStateChanged   :   STATE_BUFFERING 
onPlayerStateChanged   :   STATE_READY 

このログはonPlayerStateChangedから取得しましたが、これは常に呼び出されるわけではありません!

16
b4hr4m

playWhenReadyPlayer.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

準備ができたら再生します。 :)

44
marcbaechinger

この機能を使用できます:

public boolean isPlaying() {
    return exoPlayer.getPlaybackState() == Player.STATE_READY && exoPlayer.getPlayWhenReady();
}
6
Photon

exoplayer.getPlayWhenReady()を使用して、プレーヤーが現在一時停止状態または再生状態にあるかどうかを確認できます。

2
Rohan Seth

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のインスタンスです。

0
Krishna Sharma