b4h*_*r4m 21 resume android exoplayer pause
我在github搜索了两天这个问题,但我找不到真正的答案.我想,用于检测例如pause / resume在ExoPlayer > 2.x.任何人都可以举个例子吗?我检查过onPlayerStateChanged,问题没解决.
onPlayerStateChanged : STATE_BUFFERING
onPlayerStateChanged : STATE_READY
Run Code Online (Sandbox Code Playgroud)
我刚从这里得到了这个日志,onPlayerStateChanged并没有一直调用它!
mar*_*ger 48
您需要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
}
}
});
Run Code Online (Sandbox Code Playgroud)
播放/暂停ExoPlayer提供的播放器
player.setPlayWhenReady(boolean)
Run Code Online (Sandbox Code Playgroud)
ExoPlayer的播放状态序列与媒体文件永远不会停止到拒绝者,在四种状态中都是一次,并且不表示播放/暂停:
Player.STATE_IDLE;
Player.STATE_BUFFERING;
Player.STATE_READY;
Player.STATE_ENDED;
Run Code Online (Sandbox Code Playgroud)
每次玩家需要缓冲它时:
Player.STATE_READY;
Player.STATE_BUFFERING;
Player.STATE_READY;
Run Code Online (Sandbox Code Playgroud)
设置playWhenReady不会影响状态.
所有媒体实际上都在播放
playWhenReady && playbackState == Player.STATE_READY
Run Code Online (Sandbox Code Playgroud)
它准备就绪时播放.:)
Cas*_*ins 11
一定是因为其他答案都贴出来了,Player.EventListener 中提供了一个新方法。这对我很有效:
override fun onIsPlayingChanged(isPlaying: Boolean) {
// your code here
}
Run Code Online (Sandbox Code Playgroud)
如果 isPlaying 为 false,则暂停,否则播放。
您可以使用此功能:
public boolean isPlaying() {
return exoPlayer.getPlaybackState() == Player.STATE_READY && exoPlayer.getPlayWhenReady();
}
Run Code Online (Sandbox Code Playgroud)
我有同样的要求来检测 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)
}
}
Run Code Online (Sandbox Code Playgroud)
步骤 2:将自定义控件调度程序类设置PlayerControlDispatcher到播放器视图中。
playerView.setControlDispatcher(PlayerControlDispatcher())
Run Code Online (Sandbox Code Playgroud)
其中 playerView 是com.google.android.exoplayer2.ui.PlayerView我们在布局文件中声明的实例。
Kotlin 2020 解决方案方法更新
\n状态变化和播放错误等事件会报告给已注册的Player.EventListener实例。
Player.EventListener 有空的默认方法,因此您只需实现您\xe2\x80\x99感兴趣的方法。
首先,你的班级,比如你的活动,必须符合Player.EventListener。
然后你重写onIsPlayingChanged类上的方法。外部onCreate方法...
将侦听器添加到您的播放器实例:
\n// Adding player listener for tracking events\nplayer?.addListener(this)\nRun Code Online (Sandbox Code Playgroud)\n您可以使用 Player.isPlaying 检查玩家是否正在玩(即位置正在前进):
\n//Listening to player events\noverride fun onIsPlayingChanged(isPlaying: Boolean){\n if (isPlaying) {\n // Active playback.\n } else {\n // Not playing because playback is paused, ended, suppressed, or the player\n // is buffering, stopped or failed. Check player.getPlaybackState,\n // player.getPlayWhenReady, player.getPlaybackError and\n // player.getPlaybackSuppressionReason for details.\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n就是这样。很简单。
\n| 归档时间: |
|
| 查看次数: |
11255 次 |
| 最近记录: |