我有一个Android应用,该服务使用在服务中运行的ExoPlayer播放音频。在活动A中,您可以选择要播放的曲目。服务启动并开始播放音频。控件变为可见,一切看起来都很正常:
当我移至Activity-B时,由于是一项服务,因此音频会继续在后台播放。当我返回到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;
}
在我的代码中,我首先将播放器附加到控件上,然后将它们显示出来(这对我来说似乎很合逻辑),所以这就是问题所在。