gpt4 book ai didi

android - 处理 Android Pie 上的后退按钮 VideoView

转载 作者:行者123 更新时间:2023-12-05 00:21:02 25 4
gpt4 key购买 nike

我正在使用 VideoViewMediaController .我正在与背压错误作斗争,这很常见,因此我们可以找到很多关于此的主题:

Android back button and MediaController

Back button won't work when VideoView is playing video

First Back button press not caught when playing a video android

Problem with back button in VideoView

所有这些都建议覆盖 dispatchKeyEvent里面 MediaController .但它不会在 Android Pie 上触发...方法适用于较旧的操作系统版本,但在 Pie 上我没有得到 dispatchKeyEventonKeyPressed当媒体控件可见时在任何地方调用 - Activity (onBackPressed 也选中),任何 View包括VideoView (在整个运行时集中)和MediaController .其实只要MediaController在屏幕上可见,后退按钮不起作用(没有关闭 Activity 也没有隐藏 MediaController ),我无法弄清楚“谁”使用了该事件......

MediaController mp = new MediaController(this) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
if (event.getAction() == KeyEvent.ACTION_UP)
onBackPressed();
return true;
}
return super.dispatchKeyEvent(event);
}
};
videoView.setMediaController(mp);

当我删除上面的代码时一切正常,但我需要这些媒体控件

一年前有人遇到过类似的问题,没有任何答案...(请注意,Pie 更年轻...)

Android back button not working while playing video in VideoView

最佳答案

我也在寻找解决方案,直到我自己找到它:

在您的 MediaController 中,您必须添加一个 OnUnhandledKeyEventListener。

 public bool OnUnhandledKeyEvent(View v, KeyEvent e)
{
if (e.KeyCode == Keycode.Back && e.Action == KeyEventActions.Up)
{
...
}
return true;
}

对我来说(使用 Xamarin)它看起来像:
public class ExtMediaController : MediaController
{
public delegate void CallBackButtonDelegate();
public CallBackButtonDelegate BackEvent;
public ExtMediaController(Context context) : base(context)
{
base.AddOnUnhandledKeyEventListener(new OnUnhandledKeyEventListener(this));
}


public override bool DispatchKeyEvent(KeyEvent e)
{
if (e.KeyCode == Keycode.Back)
{
BackEvent?.Invoke();
//return base.DispatchKeyEvent(e);
}

return base.DispatchKeyEvent(e);
}

}


public class OnUnhandledKeyEventListener : Java.Lang.Object, IOnUnhandledKeyEventListener
{
private ExtMediaController LinkedMediaController;

public OnUnhandledKeyEventListener(ExtMediaController extMediaController)
{
LinkedMediaController = extMediaController;
}

public bool OnUnhandledKeyEvent(View v, KeyEvent e)
{
if (e.KeyCode == Keycode.Back && e.Action == KeyEventActions.Up)
{
LinkedMediaController.BackEvent?.Invoke();
}
return true;
}
}

关于android - 处理 Android Pie 上的后退按钮 VideoView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53830355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com