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.

  • Compartir enlace de audio de terceros en la nube de sonido y youtube en la aplicación Android
  • CircularRedirectException con autenticación de google
  • Youtube Video en WebView no se carga
  • Excepción de clase no encontrada al ejecutar demostraciones de API de YouTube para Android
  • Reproduce youtube / vimeo vídeo incrustado en HTML en Android WebView
  • Vídeos múltiples de YouTube para Android en la actividad
  • reproducir archivo de vídeo de youtube en android
  • ¿Cómo puedo reproducir vídeos de Youtube en un diseño personalizado de Android?
  • Reproduce vídeos de Youtube en la vista de vídeo en android
  • YouTubeAndroidPlayerAPI no puede reproducir algunos videos
  • ¿Incrustar un video de youtube en la aplicación android usando eclipse?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.