Botón de pantalla completa de Video dentro de WebView no funciona

Estoy tratando de implementar una subclase de WebChromeClient para tener un botón de pantalla completa de trabajo en youtube incrustar enlaces de vídeo (por ejemplo: https://www.youtube.com/embed/dQw4w9WgXcQ ) dentro de un WebView.

Básicamente simplificado este repo , he aquí algunos fragmentos:

VideoWebChromeClient:

public class VideoWebChromeClient extends WebChromeClient { private boolean isVideoFullscreen = false; private View activityNonVideoView; private ViewGroup activityVideoView; private View videoViewContainer; private CustomViewCallback videoCallback; private Window videoWindow; public VideoWebChromeClient(View activityNonVideoView, ViewGroup activityVideoView, Window window) { this.activityNonVideoView = activityNonVideoView; this.activityVideoView = activityVideoView; this.videoWindow = window; } @Override public void onShowCustomView(View view, CustomViewCallback callback) { Log.w("ENTER FULLSCREEN"); videoCallback = callback; videoViewContainer = view; videoWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); activityNonVideoView.setVisibility(View.GONE); activityVideoView.addView(videoViewContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); activityVideoView.setVisibility(View.VISIBLE); isVideoFullscreen = true; } @Override public void onHideCustomView() { if (!isVideoFullscreen) { return; } Log.w("EXIT FULLSCREEN"); activityVideoView.setVisibility(View.GONE); activityVideoView.removeView(videoViewContainer); activityNonVideoView.setVisibility(View.VISIBLE); videoWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); videoViewContainer = null; videoCallback.onCustomViewHidden(); isVideoFullscreen = false; } public boolean onBackPressed() { onHideCustomView(); return isVideoFullscreen; } } 

WebViewActivity

 public class WebViewActivity extends BaseActivity { public static final String WEB_VIEW_URL_EXTRA = "URL"; private boolean loadedFirstURL = true; private VideoWebChromeClient mWebChromeClient; @Bind(webview) WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(provideLayoutId()); String url = (String) getIntent().getSerializableExtra(WEB_VIEW_URL_EXTRA); // Check if URL is YouTube / Vimeo if (RegexHelper.isVideoURL(url)){ // Allow Fullscreen final View defaultLayout = findViewById(R.id.defaultLayout); final View fullscreenLayout = findViewById(R.id.fullscreenLayout); mWebChromeClient = new VideoWebChromeClient(defaultLayout, (ViewGroup) fullscreenLayout, getWindow()); mWebView.setWebChromeClient(mWebChromeClient); // Block external links mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (loadedFirstURL) { loadedFirstURL = false; return false; } return true; } }); } mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl(url); } @Override public void onBackPressed() { if (!mWebChromeClient.onBackPressed()) { if (mWebView.canGoBack()) { mWebView.goBack(); } else { super.onBackPressed(); } } } } 

Funciona correctamente en KitKat, pero no en Nougat (sólo tengo dos dispositivos para probar): cuando toco el botón de pantalla completa a veces se pasa a pantalla completa, pero la mayoría de veces "parpadea" y no se queda en pantalla completa.

Y entonces, cuando está realmente en modo de pantalla completa, el botón para salir de la pantalla completa no funciona ( onHideCustomView no se llama en absoluto)

Usted puede ver que puse registros y noté que cuando el "flash" sucede, onHideCustomView se llama realmente después de onShowCustomView ( "ENTER FULLSCREEN" entonces inmediatamente "EXIT FULLSCREEN" ), no entiendo porqué.

Muchas gracias si alguien me puede apuntar hacia una solución

Yo también estaba enfrentando el mismo problema, pero lo arreglé después de pasar horas en él.

Todo lo que tiene que hacer es establecer la cadena UserAgent de un dispositivo KitKat. ¡Y eso es todo!

 private String userAgent = "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/_BuildID_) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"; mWebView.getSettings().setUserAgentString(userAgent); 

Esto arreglará todo el funcionamiento extraño de onShowCustomView () y onHideCustomView () en dispositivos más nuevos. Espero eso ayude.

  • Cómo reproducir vídeos de YouTube en WebView en Amazon Fire TV?
  • La API de Youtube no devuelve los resultados actualizados
  • Reproducción de vídeos de youtube en la brecha telefónica
  • Cómo reproducir video de YouTube en mi aplicación de Android?
  • Varios jugadores de Youtube en una actividad
  • Android WebView con incrustaciones iframe no se muestra en 4.2.2 ni en la parte inferior
  • La vista web de Android no puede convertir el video de youtube incrustado a través de iframe
  • ¿Cómo iniciar la aplicación Youtube para abrir un canal?
  • Cómo actualizar Youtube Player View onItemClickListener () en un ListView
  • Youtube API "Se ha producido un error al inicializar el reproductor de YouTube".
  • Ejecución de una aplicación de Android en la parte superior de la pantalla de bloqueo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.