隐藏控件时,Amazon Fire TV遥控器不暂停ExoPlayer

时间:2019-05-29 20:05:17

标签: android exoplayer amazon-fire-tv

我正在开发一个Android库,这只是一个包装ExoPlayer的简单视频播放器。使用Amazon Fire TV时,我可以使用遥控器导航应用程序(方向盘在视图中的元素之间切换),并且可以控制播放器(播放/暂停按钮将切换播放状态,而搜索按钮将按预期工作) ....只要控制条可见

大约3秒钟后,控制栏自动隐藏,并且遥控器变为无响应

是否有适当的解决方法,还是需要手动检测遥控器上的按键并显示控制栏?我觉得这是亚马逊的ExoPlayer端口应该解决的问题

更新

我扩展了PlayerView类并覆盖了dispatchKeyEvent方法以查看所看到的内容:

public class Test extends PlayerView {
    @Override
    public boolean dispatchKeyEvent(KeyEvent event)
    {
        Log.debug("***** KEY EVENT: " + String.valueOf(event.getKeyCode()) + " *********");
        return true;
    }
}

这样做,然后按我注意到的遥控器上的播放按钮:

  • 当控制栏可见时,调度了KeyEvent值为keyCode的{​​{1}}
  • 隐藏控制栏时,此方法从未触发

我浏览了85可用的方法,以查看是否有帮助,但似乎没有什么值得的:

  • PlayerView-确定在视频首次开始播放时是否显示控制栏
  • setControllerAutoShow-确定在播放广告时控制栏是否可见
  • setControllerHideDuringAds-与FireTV无关(无触摸事件),但是如果您点按视频,则隐藏控制栏
  • setControllerHideOnTouch-可以延迟控制栏的隐藏,但是在隐藏之后,否则我无法将其重新带回
  • setControllerHideTimeoutMs-可以用代码强制显示控制器,使我可以暂停视频,但是当我看不到按键事件时,按遥控器上的按钮时无法正确调用它< / li>

最终,我只希望它的行为像Netflix或Hulu应用程序一样-几秒钟不活动后,控制栏就会消失,但是如果您按下暂停按钮,则控制栏会返回。

2 个答案:

答案 0 :(得分:1)

我在您的解决方案上做了一些扩展,以使所有控件(包括播放器和活动的控件)都能正常工作,因为无法再退出活动了,而且在不同的设备(例如电话)上也无法退出活动操作音量控制...这使Fire设备和其他设备上的所有功能正常工作。我希望这对其他人is之以鼻。

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // this sends them to the playerView but also to the activity - whoever wants it first
    return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}

答案 1 :(得分:0)

我找到了答案,但这并不是一个很漂亮的答案。由于某些原因(我仍然想知道为什么,如果有人可以解释原因,那么我很乐意接受他们的回答),当控制栏消失时,PlayerView失去了焦点,并且不再向其发送键盘事件。但是,托管PlayerView 活动 仍然可以看到所有键盘事件。因此,我在“活动”中添加了以下内容:

    @Override
    public boolean dispatchKeyEvent(KeyEvent event)
    {
        playerView.dispatchKeyEvent(event);
        return true;
    }

现在无论控制栏是否可见,播放器仍会响应所有按键事件。但是:

  • 这需要编辑活动,这意味着使用我的播放器库的任何人都需要了解这一额外步骤才能正确集成播放器
  • 这并不能解释为什么玩家失去焦点,只是绕过了问题