显示 HTML5 视频全屏

6
我有一个包含HTML视频的Webview。我想要全屏显示此视频,因此我重写了我的WebChromeClient的onShowCustomView方法,使用VideoView。这在2.3中非常有效,但是在4.x中onShowCustomView从未被调用。视频仍将播放,但是它是从Webview内部播放的,除了点击播放和停止之外没有任何控件。
另外,我已经设置了hardwareAccelerated="true"。
您知道为什么onShowCustomView从未被调用吗?
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    webView = (WebView) findViewById(R.id.webView);

    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setPluginState(WebSettings.PluginState.ON);
    webView.setWebViewClient(new WebViewClient());
    webView.setWebChromeClient(new MyChromeClient());

    webView.loadUrl(URL);

}

private class MyChromeClient extends WebChromeClient implements
        OnCompletionListener, OnErrorListener, OnPreparedListener {

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        Log.d("ma", "onShowCustomView");
    }

...

onShowCustomView在2.3.6中没有被调用,可能出了什么问题? - Abhi
2个回答

9

经过一番努力,我终于找到了原因。在Android 4.x中,您必须使用“video”标记中的html“controls”属性来显示控件。一旦您显示这些控件,您可以单击全屏按钮,然后调用“onShowCustomView”。由于嵌入式视频在4.x中可用,并且您可以选择使用控件进入全屏模式,因此播放时不会自动调用onShowCustomView。不幸的是,在Android文档中对此进行了非常糟糕的记录。


4
有没有其他方式可以调用onShowCustomView?我需要参考VideoView对象,但在4.x之后我无法获取它。 - manelizzard
2
即使您成功调用了onShowCustomView方法,请注意在4.x版本中传递的不再是VideoView,而是SurfaceView。 - Bilthon

0

这对我有用。

我在使用 Vimeo 视频制作 Web 应用程序时,找到了一种“怪癖解决方案”。 我测试了两个设备。一个是 Android 4.2.x 版本,另一个是 4.4.x 版本。其中一个能够在全屏模式下播放视频,而另一个则无法。

在阅读官方文档 '迁移到 Android 4.4 中的 WebView' 后,我发现两个设备具有不同的“UserAgent”名称。

其中一个有此 userAgent。

Mozilla/5.0 (Linux; Android 4.4.2; SHV-E300L Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36

另一个有这个。

Mozilla/5.0 (Linux; Android 4.4.4; SHV-E370K Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36

我认为 Chrome 版本是全屏视频的解决方案。所以我将 Chrome 版本更改为 30.x。

WebSettings s = mWebView.getSettings();
//Change UserAgent to play fullscreen vimeo's videos.
String agent = s.getUserAgentString();
String p = "(Chrome/[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)";
Pattern pattern = Pattern.compile(p);
Matcher matcher = pattern.matcher(agent);
if(matcher.find()) {
    agent = matcher.replaceFirst("Chrome/30.0.0.0");
}
s.setUserAgentString(agent);

哦~~我可以睡觉了...(对不起我的英语很差)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接