2015-03-30 5 views
5

Attualmente sto cercando di implementare un youtube incorporato nella mia app Android che utilizza una WebView per visualizzarne il contenuto e sto puntando all'API 14 e successive ma il problema è che l'iframe incorporato da youtube non viene mostrato nella mia webview alla 4.2.2 e sotto, ma funziona bene con la versione 4.3 e successive. Mi sono perso su quello che ho perso, ma per il campione Ecco il codice che sto utilizzando per implementare:Android WebView con incorporamenti iframe non viene visualizzato in 4.2.2 e sotto

String customHtml = ""; 

     String video; // = "<iframe src=\"http://www.youtube.com/embed/" + "dRvIiIVoVNw" + "\" width=\"100%\" height=\""+ 320 +"px\" frameborder=\"0\"></iframe>"; 

     video = "<div id=\"player\"></div>" + 
       " <script>" + 
       "  var tag = document.createElement('script');" + 
       "  tag.src = \"https://www.youtube.com/iframe_api\";" + 
       "  var firstScriptTag = document.getElementsByTagName('script')[0];" + 
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);" + 
       "  var player;" + 
       "  function onYouTubeIframeAPIReady() {" + 
       "  player = new YT.Player('player', {" + 
       "   height: '390'," + 
       "   width: '640'," + 
       "   videoId: 'dRvIiIVoVNw'," + 
       "   events: {" + 
       "   'onReady': onPlayerReady," + 
       "   'onStateChange': onPlayerStateChange" + 
       "   }" + 
       "  });" + 
       "  }" + 
       "  function onPlayerReady(event) {" + 
       "  event.target.playVideo();" + 
       "  }" + 
       "  var done = false;" + 
       "  function onPlayerStateChange(event) {" + 
       "  if (event.data == YT.PlayerState.PLAYING && !done) {" + 
       "   setTimeout(stopVideo, 6000);" + 
       "   done = true;" + 
       "  }" + 
       "  }" + 
       "  function stopVideo() {" + 
       "  player.stopVideo();" + 
       "  }" + 
       " </script>"; 

     customHtml = "<html>" + "<body>" 
        /*add the video here*/ 
       + video 
       + "<b><font size=\"" 
       + 5 + "\">" 
       //+ "<div id='wrap'>" 
       + "Test title" 
       + "</font></b>" 
       + "<font size=\"" + 3 + "\"><br><br><i>Detail1: " + "Test" + "<br/>" + new_date + "<br />Detail2: "+ "Test" +"</i></font><br><br>" 
       + "<font size=\"" + 3 + "\">" 
       + "Detail content" + "</font>" 
       + "<br><br><br></body></html>"; 

     webView.loadData(customHtml, "text/html; charset=utf-8", "UTF-8"); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setWebChromeClient(new WebChromeClient()); 
     webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
     webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); 
     webView.setWebViewClient(new DetailWebViewClient()); 

DetailWebViewClient è solo una semplice sostituzione:

private class DetailWebViewClient extends WebViewClient { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url.contains("http")) { 
       Intent webView = new Intent(getBaseContext(), ActivityWebView.class); 
       webView.putExtra("url", url); 
       startActivity(webView); 
       return true; 
      } 
      return false; 
     } 

     @Override 
     public void onReceivedError(WebView view, int errorCode, 
            String description, String callbackUrl) { 

      super.onReceivedError(view, errorCode, description, callbackUrl); 

      Toast.makeText(getBaseContext(), 
        description + " errorcode=" + errorCode, Toast.LENGTH_SHORT) 
        .show(); 

     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
     } 

    } 

Ora quello che ho provato è sia l'iframe uno e l'API iframe here ma senza fortuna su entrambi.

Io uso anche android:hardwareAccelerated="true" sul mio manifest ma ancora non funziona. Ho anche cercato su altre domande con gli stessi problemi, ma tutte quelle soluzioni non funzionavano neanche sul mio lato (WebChromeClient, PluginsEnabled, HardwareAccelerated). Spero che qualcuno possa aiutarmi in questo.

risposta

2

fissa già e il problema è queste righe:

webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); 

Quindi, ecco le impostazioni pieni WebView che ho usato:

 webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     webView.getSettings().setSupportMultipleWindows(true); 
     webView.setWebChromeClient(new WebChromeClient()); 
     webView.setHorizontalScrollBarEnabled(false); 
     webView.loadData(customHtml, "text/html; video/mpeg", "UTF-8"); 
     webView.setWebViewClient(new DetailWebViewClient()); 

e ci si va ora lavorando bene sul mio fine. :)