Android 设置播放器后 ExoPlayer 控件不工作
Android ExoPlayer controls not working after setting player
我有一个 Android 应用程序在服务中使用 ExoPlayer 运行 播放音频。在 Activity-A 中,您可以 select 播放曲目。该服务启动并开始播放音频。控件变得可见,一切看起来都很正常:
当我转到 Activity-B 时,音频继续在后台播放,因为它是一项服务。当我 return 回到 Activity-A 时,控件出现但显示不正确。音频仍然可以正常播放,但进度条不正确,同时显示播放和暂停按钮,而不仅仅是暂停:
我必须与控件进行交互,例如单击播放按钮,然后它们看起来又正常了,进度条显示正确。
这是将播放器附加到控件的方法:
private void initializePlayer() {
if (isBound && audioPlayerService != null) {
player = audioPlayerService.getPlayerInstance();
playerControlView.setPlayer(player);
}
}
为什么控件不能立即工作?
已通过以下代码修复:
private void initializePlayer() {
if (isBound && audioPlayerService != null) {
player = audioPlayerService.getPlayerInstance();
if (audioPlayerService.isPlaying()) {
playerControlView.setVisibility(View.VISIBLE);
}
playerControlView.setPlayer(player);
}
}
解释:
经过一些研究,我注意到在您使用 PlayerControlView.setPlayer()
将播放器附加到您的视图后,将调用 PlayerControlView.updateAll()
方法以使一切看起来正确。但是,会检查控件是否可见并且更新不会完成(方法退出),除非控件实际上是可见的:
if (!isVisible() || !isAttachedToWindow) {
return;
}
在我的代码中,我首先将播放器附加到控件上,然后再使它们可见(这对我来说似乎合乎逻辑),所以这就是问题所在。
我有一个 Android 应用程序在服务中使用 ExoPlayer 运行 播放音频。在 Activity-A 中,您可以 select 播放曲目。该服务启动并开始播放音频。控件变得可见,一切看起来都很正常:
当我转到 Activity-B 时,音频继续在后台播放,因为它是一项服务。当我 return 回到 Activity-A 时,控件出现但显示不正确。音频仍然可以正常播放,但进度条不正确,同时显示播放和暂停按钮,而不仅仅是暂停:
我必须与控件进行交互,例如单击播放按钮,然后它们看起来又正常了,进度条显示正确。
这是将播放器附加到控件的方法:
private void initializePlayer() {
if (isBound && audioPlayerService != null) {
player = audioPlayerService.getPlayerInstance();
playerControlView.setPlayer(player);
}
}
为什么控件不能立即工作?
已通过以下代码修复:
private void initializePlayer() {
if (isBound && audioPlayerService != null) {
player = audioPlayerService.getPlayerInstance();
if (audioPlayerService.isPlaying()) {
playerControlView.setVisibility(View.VISIBLE);
}
playerControlView.setPlayer(player);
}
}
解释:
经过一些研究,我注意到在您使用 PlayerControlView.setPlayer()
将播放器附加到您的视图后,将调用 PlayerControlView.updateAll()
方法以使一切看起来正确。但是,会检查控件是否可见并且更新不会完成(方法退出),除非控件实际上是可见的:
if (!isVisible() || !isAttachedToWindow) {
return;
}
在我的代码中,我首先将播放器附加到控件上,然后再使它们可见(这对我来说似乎合乎逻辑),所以这就是问题所在。