
在 ExoPlayer 中,监听播放器的状态变化是实现动态 UI 更新和逻辑控制的基础。ExoPlayer 提供了 Player.Listener 接口(在旧版本中为 Player.DefaultEventListener),通过实现该接口中的回调方法,可以捕获播放器的各种状态事件。
核心概念包括:
要准确判断播放器是处于“播放中”还是“已暂停”状态,通常需要结合这两个参数进行判断,或者利用 ExoPlayer 2.12 及更高版本提供的更直接的 API。
对于 ExoPlayer 2.12 及更高版本,最直接、最清晰的判断播放状态的方法是监听 onIsPlayingChanged 回调。当媒体实际开始播放或停止播放(包括暂停)时,此方法会被调用。
示例代码 (Kotlin):
player.addListener(object : Player.Listener {
override fun onIsPlayingChanged(isPlaying: Boolean) {
super.onIsPlayingChanged(isPlaying)
if (isPlaying) {
// 媒体正在播放
// 更新UI为播放状态,例如显示暂停按钮
println("ExoPlayer: 正在播放")
} else {
// 媒体已暂停或停止
// 更新UI为暂停状态,例如显示播放按钮
println("ExoPlayer: 已暂停/停止")
}
}
})示例代码 (Java):
player.addListener(new Player.Listener() {
@Override
public void onIsPlayingChanged(boolean isPlaying) {
Player.Listener.super.onIsPlayingChanged(isPlaying); // 兼容性调用
if (isPlaying) {
// 媒体正在播放
// 更新UI为播放状态,例如显示暂停按钮
System.out.println("ExoPlayer: 正在播放");
} else {
// 媒体已暂停或停止
// 更新UI为暂停状态,例如显示播放按钮
System.out.println("ExoPlayer: 已暂停/停止");
}
}
});对于需要更细粒度控制或兼容旧版本 ExoPlayer 的场景,可以同时监听 onPlayWhenReadyChanged 和 onPlaybackStateChanged。
要判断是否正在播放或已暂停,需要综合这两个状态:
示例代码 (Kotlin):
player.addListener(object : Player.Listener {
override fun onPlaybackStateChanged(playbackState: Int) {
super.onPlaybackStateChanged(playbackState)
updatePlayPauseUI(player.playWhenReady, playbackState)
}
override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) {
super.onPlayWhenReadyChanged(playWhenReady, reason)
updatePlayPauseUI(playWhenReady, player.playbackState)
}
private fun updatePlayPauseUI(playWhenReady: Boolean, playbackState: Int) {
if (playWhenReady && (playbackState == Player.STATE_READY || playbackState == Player.STATE_BUFFERING)) {
// 媒体正在播放(或即将播放)
println("ExoPlayer: 正在播放 (基于 playWhenReady 和 playbackState)")
// 更新UI为播放状态
} else if (!playWhenReady && (playbackState == Player.STATE_READY || playbackState == Player.STATE_BUFFERING || playbackState == Player.STATE_IDLE)) {
// 媒体已暂停
println("ExoPlayer: 已暂停 (基于 playWhenReady 和 playbackState)")
// 更新UI为暂停状态
} else if (playbackState == Player.STATE_ENDED) {
// 播放结束
println("ExoPlayer: 播放结束")
// 更新UI为播放结束状态
}
}
})在 ExoPlayer 2
以上就是ExoPlayer 播放与暂停状态检测:从基础到最佳实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号