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;
}

在我的代码中,我首先将播放器附加到控件上,然后再使它们可见(这对我来说似乎合乎逻辑),所以这就是问题所在。