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.