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

Amazon Fire TV Remote Not Pausing ExoPlayer When Controls Hidden

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

3秒左右控制条自动隐藏,遥控器无反应

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

更新

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

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

这样做并按下遥控器上的播放按钮我注意到:

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

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

我找到了一个答案,但它不是一个完美的答案。出于某种原因(我仍然想知道为什么,如果有人能解释为什么那么我很乐意接受他们的回答而不是我的)当控制栏消失时 PlayerView 失去焦点,键盘事件不再发送给它.但是,托管 PlayerViewActivity 仍然可以看到所有键盘事件。所以我将以下内容添加到我的 Activity:

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

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

  • 这需要编辑 activity,这意味着任何使用我的播放器库的人都需要了解这个额外的步骤才能正确集成播放器
  • 这并不能解释玩家失去焦点的原因,它只是规避了这个问题

我对你的解决方案做了一些扩展,让所有的控件都能工作——包括玩家的和 activity 的——因为不可能再退出 activity,而且,不同的设备,如电话,无法操作音量控制......这使得一切正常,无论是在 Fire 设备上还是在其他设备上。我希望这对其他人有帮助。

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