2012-09-07 72 views
5

我有一个web视图,里面有html视频。我想全屏显示此视频,因此我覆盖我的WebChromeClientonShowCustomView以使用VideoView。这在2.3中很好用,然而,在4.x中onShowCustomView从未被调用过。视频仍然会播放,但是,除了点击播放和停止播放外,它还可以在网页浏览中播放,而不需要任何控制。显示HTML5视频全屏

另外,我有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"); 
    } 

... 
+0

onShowCustomView(我的英语不好对不起)不被称为2.3.6还,可能是什么问题? – Abhi

回答

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

+2

关于如何强制调用onShowCustomView的更新? –

0

这适用于我。

我在用vimeo视频制作网络应用程序时发现了一个'quirks解决方案'。 我测试了两个设备。一个是Android 4.2.x版本,另一个是4.4.x版本。一个能够以全屏模式播放视频,另一个则无法播放。

阅读官方文档'Migrating to WebView in Android 4.4'后,我发现在两个设备中有不同的'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); 

哦~~我可以睡...