【问题标题】:Amazon Fire TV Remote Not Pausing ExoPlayer When Controls Hidden隐藏控件时亚马逊 Fire TV 遥控器不会暂停 ExoPlayer
【发布时间】:2019-05-29 20:05:17
【问题描述】:

我正在开发一个 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;
    }
}

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

  • 当控制栏可见时,一个KeyEventkeyCode 值为85 被调度
  • 当控制栏被隐藏时,此方法从未触发

我浏览了PlayerView 可用的方法,看看是否有任何帮助,但似乎没有任何价值:

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

最终,我只想让它表现得像 Netflix 或 Hulu 应用程序一样——控制栏会在几秒钟不活动后消失,但如果你按下暂停按钮,控制栏就会恢复。

【问题讨论】:

    标签: android exoplayer amazon-fire-tv


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您好,非常感谢您的这篇文章,我尝试在我正在编写的应用程序中使用此解决方案....虽然它似乎正确拦截了远程按键并将它们重定向到播放器视图(因此控件重新出现),我得到的副作用是活动不再接收它们......因此不可能,例如,单击“返回”并退出播放器...... . :-( 你是怎么解决这个问题的?
    • 我自己回答:在从覆盖的函数返回之前添加 super.dispatchKeyEvent(event) 似乎可以解决问题并将事件分派给玩家和活动...
    • 对此还有一个问题:您知道是否可以在 UI 中选择和“单击”前进和后退按钮(带有视频控件)?他们似乎没有,但遥控器上的等效物理按钮确实有效。你是否也遇到过这个限制?谢谢!
    • @DanieleMuscetta 不幸的是,对于是否可以单击前进和后退按钮,我没有答案。该项目已移交给另一个开发人员,因此我不再从事 Android SDK 工作,也无法访问 AmazonFire。
    • 好的,无论如何我很感激这个答案:-) 我会弄清楚的......
    【解决方案2】:

    我对您的解决方案进行了一些扩展,以让所有控件(播放器和 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2015-04-02
      • 1970-01-01
      • 2022-07-15
      • 1970-01-01
      相关资源
      最近更新 更多