2012-09-07 18 views
5

Ich habe eine Webansicht, die HTML-Video enthält. Ich möchte dieses Video im Vollbildmodus anzeigen, also überschreibe ich onShowCustomView meines WebChromeClient, um eine VideoView zu verwenden. Das funktioniert super in 2.3, wird aber in 4.x onShowCustomView nie aufgerufen. Das Video wird weiterhin abgespielt, es wird jedoch aus dem Webview heraus abgespielt, ohne irgendwelche Steuerelemente, außer zum Abspielen und Stoppen.HTML5 Video Vollbild anzeigen

Auch ich habe hardwareAccelerated = "True".

Eine Idee warum onShowCustomView nie aufgerufen wird?

@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 nicht auch in 2.3.6 genannt zu werden, was das Problem sein könnte? – Abhi

Antwort

9

Nachdem ich eine Weile mit diesem Problem zu kämpfen hatte, fand ich endlich die Ursache. In Android 4.x müssen Sie die Steuerelemente mithilfe des HTML-Steuerelements "controls" im "video" -Tag anzeigen. Sobald Sie diese Steuerelemente anzeigen, können Sie auf den Vollbild-Button klicken, der dann 'onShowCustomView' aufruft. Da Embedded Video in 4.x verfügbar ist und Sie die Möglichkeit haben, mit den Steuerelementen zum Vollbildmodus zu wechseln, wird onShowCustomView nicht automatisch beim Abspielen aufgerufen. Leider ist dies in der Android-Dokumentation sehr schlecht dokumentiert.

+4

Gibt es keine andere Möglichkeit, 'onShowCustomView' zu nennen? Ich brauche den Verweis auf 'VideoView' Objekt, aber nach 4.x bin ich nicht in der Lage, es zu erhalten – manelizzard

+2

Auch wenn Sie onShowCustomView aufgerufen bekommen, beachten Sie, dass in 4.x nicht mehr ein VideoView, sondern ein SurfaceView übergeben wird – Bilthon

+2

Gibt es Updates zum Erzwingen des Aufrufs von onShowCustomView? –

0

Das funktioniert für mich.

Ich fand eine "Quirks-Lösung" bei der Erstellung der Web-App mit Vimeo-Videos. Ich habe zwei Geräte getestet. Einer ist Android 4.2.x Version, ein anderer ist 4.4.x Version. Man kann das Video im Vollbildmodus abspielen, ein anderes ist nicht in der Lage.

Nach dem Lesen des offiziellen Dokuments 'Migrating to WebView in Android 4.4' habe ich festgestellt, dass zwei UserAgent-Namen in zwei Geräten vorhanden sind.

Man hat diesen 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 

Ein anderer hat dies.

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 

Ich denke, die Chrom-Version ist die Lösung, Vollbild-Video zu machen. Also habe ich die Chrome-Version auf 30.x geändert.

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); 

Oh ~~ Ich kann schlafen ... (sorry mit meinem schlechten Englisch)