2012-09-07 39 views
5

Tengo una vista web que tiene un video html dentro. Quiero mostrar este video a pantalla completa para que anule onShowCustomView de mi WebChromeClient para usar un VideoView. Esto funciona muy bien en 2.3, sin embargo, en 4.x onShowCustomView nunca se llama. El video se reproducirá, sin embargo, se reproduce desde la vista web sin ningún control, además de hacer clic para reproducir y detener.Mostrar video HTML5 Pantalla completa

Además, tengo hardwareAccelerated = "true".

¿Alguna idea de por qué onShowCustomView nunca se llama?

@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 no está siendo llamados en 2.3.6 también, lo que podría ser el problema? – Abhi

Respuesta

9

Bueno, después de luchar con esto por un tiempo, finalmente encontré la causa. En Android 4.x, debe mostrar los controles utilizando el atributo html 'controls' en la etiqueta 'video'. Una vez que muestre estos controles, puede hacer clic en el botón de pantalla completa que luego llamará a 'onShowCustomView'. Dado que el video integrado está disponible en 4.x y tiene la opción de ir a pantalla completa con los controles, no se invocará automáticamente en Showhow Custom al reproducir. Desafortunadamente, esto está muy mal documentado en la documentación de Android.

+4

¿No hay otra forma de que se llame 'onShowCustomView'? Necesito la referencia al objeto 'VideoView', pero después de 4.x no puedo obtenerlo – manelizzard

+2

Incluso si logras obtener la llamada a ShowCustomView, ten en cuenta que en 4.x lo que se pasa ya no es un VideoView, sino un SurfaceView – Bilthon

+2

¿Alguna actualización sobre cómo forzar la invocación de onShowCustomView? –

0

Esto funciona para mí.

Encontré una 'solución peculiar' para hacer la aplicación web con videos vimeo. Probé dos dispositivos. Una es la versión de Android 4.2.x, otra es la versión 4.4.x. Uno puede reproducir video en modo de pantalla completa, otro no puede hacerlo.

Después de leer el documento oficial 'Migrating to WebView in Android 4.4', encontré que hay diferentes nombres de 'UserAgent' en dos dispositivos.

Uno tiene este 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 

Another tiene esto.

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 

Creo que la versión chrome es la solución para hacer un video a pantalla completa. Así que cambié la versión de Chrome 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 ~~ puedo dormir ... (lo siento con mi pobre Inglés)

Cuestiones relacionadas