2017-07-21 1 views
2

Je sais que c'est une vieille question et elle a été posée plusieurs fois. Mais j'ai essayé beaucoup de solutions, ils ne fonctionnent pas avec moi.Comment lire une vidéo en mode plein écran et quitter le mode plein écran dans Android WebView?

Je l'ai testé dans mon Huawei 6P et Samsung S7, Nexus 5, la vidéo (https://www.youtube-nocookie.com/embed/M68lNfqmTNk?rel=0&rel=0&showinfo=0) dans WebView ne fonctionne pas comme prévu (cela a fonctionné l'année dernière.). Lorsque je clique sur le bouton plein écran, "onShowCustomView" et "onHideCustomView" sont invoqués en continu. Donc, je peux voir la vidéo flashée (non-plein écran -> plein écran -> non-plein écran). Parfois, si j'ai de la chance, la vidéo passe en mode plein écran, mais si vous appuyez sur le bouton plein écran pour quitter le mode plein écran, le bouton ne fonctionne pas du tout.

J'ai écrit une démo en GitHub, j'espère que n'importe qui peut m'aider. Merci.

Voici le code

Init Webview:

mWebView = (WebView)findViewById(R.id.webview); 

    mWebChromeClient = new MyWebChromeClient(); 
    mWebView.setWebChromeClient(mWebChromeClient); 
    mWebView.setWebViewClient(new WebViewClient(){ 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      mWebView.loadUrl(url); 
      return true; 
     } 
    }); 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setUseWideViewPort(true); 
    webSettings.setAllowFileAccess(true); 
    webSettings.setSupportZoom(true); 
    webSettings.setLoadWithOverviewMode(true); 
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 

MyWebChromeClient:

public class MyWebChromeClient extends WebChromeClient { 

    FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); 

    @Override 
    public void onShowCustomView(View view, CustomViewCallback callback) { 
     Log.d("youtube", "onShowCustomView"); 
     // if a view already exists then immediately terminate the new one 
     if (mCustomView != null) { 
      callback.onCustomViewHidden(); 
      return; 
     } 
     mContentView = (ConstraintLayout) findViewById(R.id.activity_main); 
     mContentView.setVisibility(View.GONE); 
     mCustomViewContainer = new FrameLayout(MainActivity.this); 
     mCustomViewContainer.setLayoutParams(LayoutParameters); 
     mCustomViewContainer.setBackgroundResource(android.R.color.black); 
     view.setLayoutParams(LayoutParameters); 
     mCustomViewContainer.addView(view); 
     mCustomView = view; 
     mCustomViewCallback = callback; 
     mCustomViewContainer.setVisibility(View.VISIBLE); 
     setContentView(mCustomViewContainer); 
    } 

    @Override 
    public void onHideCustomView() { 
     Log.d("youtube", "onHideCustomView"); 
     if (mCustomView == null) { 
      return; 
     } else { 
      // Hide the custom view. 
      mCustomView.setVisibility(View.GONE); 
      // Remove the custom view from its container. 
      mCustomViewContainer.removeView(mCustomView); 
      mCustomView = null; 
      mCustomViewContainer.setVisibility(View.GONE); 
      mCustomViewCallback.onCustomViewHidden(); 
      // Show the content view. 
      mContentView.setVisibility(View.VISIBLE); 
      setContentView(mContentView); 
     } 
    } 

} 

Je positionniez android: hardwareAccelerated dans AndroidManifest.xml

android:hardwareAccelerated="true" 
+0

https://stackoverflow.com/questions/38842869/how-to-fullscreen-youtube-video-in-webview s'il vous plaît se référer cette espoir cette aide !!! – Kushan2

+0

merci. J'ai essayé ça ne marche pas avec moi. – User9527

+0

https://stackoverflow.com/questions/15796661/android-webview-app-wont-let-video-player-go-full-screen/16199649#16199649 est-ce que tu as vu ça? – Kushan2

Répondre

1

Pour charger la vidéo sur youtube dans WebView, vous devez utiliser iframe à la place, ex:

<iframe width="300" height=".." src="http://www.youtube.com/embed/M68lNfqmTNk" frameborder="0" allowfullscreen></iframe> 

et la charge du texte HTML à la WebView, quelque chose comme ceci: <html><body> <iframe width="330" height="315" src="http://www.youtube.com/embed/M68lNfqmTNk" frameborder="0" allowfullscreen></iframe>....

+0

Bon point !. J'ai ajouté un fichier html local dans mon dossier assets. Maintenant, le bouton "plein écran" semble fonctionner. Mais parfois tout l'écran est noir après le plein écran. Je ai mis à jour le code de démo dans github – User9527

+0

J'ai vérifié votre code, d'abord je pense que vous devez supprimer le bouton de lecture de vidéo, c'est inutile car après charger l'url à la webview l'utilisateur doit cliquer à nouveau pour lire la vidéo, donc je pense qu'il vaut mieux pour le charger dans onCreate, et essayer youtube api pour lire des vidéos youtube, c'est mieux que d'utiliser webview –

0

i t Hink il y a beaucoup de réponses déjà prédéfinies pour cette question mais je pense que vous devez simplement vérifier cette réponse une fois markparnelllink

dans cette solution définie Mark lien dans très détaillé

+0

Vous pouvez voir, que mon code de la démo est de markparnelllink. Ne fonctionne pas avec ma vidéo YouTube. Merci – User9527

0

ajouter ce code dans votre webview. webView.getSettings().setUserAgentString("Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");