2012-09-07 236 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); 

哦~~我可以睡...