我正在开发一个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应用程序一样-几秒钟不活动后,控制栏就会消失,但是如果您按下暂停按钮,则控制栏会返回。
答案 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;
}
现在无论控制栏是否可见,播放器仍会响应所有按键事件。但是: