2012-09-07 18 views
5

Ho una visualizzazione Web che contiene un video HTML. Voglio mostrare questo video a schermo intero in modo da ignorare onShowCustomView del mio WebChromeClient per utilizzare uno VideoView. Funziona alla grande in 2.3, tuttavia, in 4.x onShowCustomView non viene mai chiamato. Il video verrà comunque riprodotto, tuttavia, viene riprodotto all'interno della webview senza alcun controllo oltre a fare clic per riprodurre e interrompere.Mostra HTML5 Video Schermo intero

Inoltre, ho hardwareAccelerated = "true".

Qualche idea del perché onShowCustomView non viene mai chiamato?

@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 non si chiede a 2.3.6 anche, quello che potrebbe essere il problema? – Abhi

risposta

9

Ben dopo aver lottato con questo per un po ', ho finalmente trovato la causa. In Android 4.x devi mostrare i controlli utilizzando l'attributo 'controlli' html nel tag 'video'. Una volta visualizzati questi controlli, puoi fare clic sul pulsante a schermo intero che chiamerà "onShowCustomView". Poiché il video incorporato è disponibile in 4.x e hai la possibilità di andare a schermo intero con i controlli, onShowCustomView non verrà chiamato automaticamente in riproduzione. Sfortunatamente, questo è molto scarsamente documentato nella documentazione di Android.

+4

Non è un altro modo per richiamare 'onShowCustomView' chiamato? Ho bisogno del riferimento all'oggetto 'VideoView', ma dopo 4.x non sono in grado di ottenerlo – manelizzard

+2

Anche se riesci a ottenere onShowCustomView chiamato, nota che in 4.x ciò che viene passato non è più una vista video ma un SurfaceView – Bilthon

+2

Eventuali aggiornamenti su come forzare la chiamata di onShowCustomView? –

0

Questo funziona per me.

Ho trovato una "soluzione per i quirk" nel realizzare l'app Web con video di Vimeo. Ho testato due dispositivi. Uno è Android 4.2.x versione, un altro è la versione 4.4.x. Uno è in grado di riprodurre video in modalità a schermo intero, un altro non è in grado di farlo.

Dopo aver letto il documento ufficiale 'Migrating to WebView in Android 4.4', ho trovato che ci sono diversi nomi 'UserAgent' in due dispositivi.

Uno ha questo 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 

Un altro ha questo.

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 

Penso che la versione cromata sia la soluzione per realizzare video a schermo intero. Così ho cambiato la versione del cromo a 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); 

Oh ~~ riesco a dormire ... (scusate il mio povero inglese)

Problemi correlati