Ho effettuato le seguenti scoperte sui video HTML5 su Android 4.0+. Ottenere questo investigato ha richiesto una settimana di tentativi ed errori - e i problemi variavano con ogni versione principale di Android. GOOGLE: NON DEVE ESSERE QUESTO MOLTO DI UN P.I.T.A !!!!
Per eseguire questi test, ho creato un'app sandbox che consisteva in una pagina HTML salvata in/assets.
HTML:
<!DOCTYPE html>
<html>
<head>
<title>HTML5 Video Test</title>
</head>
<body>
<video preload="metadata"><source src="http://www.w3schools.com/html/movie.mp4" type="video/mp4"></video>
<script>
var myvideo = document.getElementsByTagName('video')[0];
myvideo.addEventListener('loadeddata', function() {
console.log("** RECEIVED loadeddata **");
myvideo.play();//this first play is needed for Android 4.1+
}, false);
myvideo.addEventListener('canplaythrough', function() {
console.log("** RECEIVED canplaythrough **");
myvideo.play();//this second play is needed for Android 4.0 only
}, false);
</script>
</body>
</html>
JAVA: ("/ attività/HTML5 video.html ")
private WebView mWebView;
private ProgressBar mProgressBar;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videotest);
// progress bar
mProgressBar = (ProgressBar) findViewById(R.id.videotest_progressbar);
mProgressBar.setProgress(0);
mProgressBar.setVisibility(View.VISIBLE);
// webview
mWebView = (WebView) findViewById(R.id.videotest_webview);
mWebView.getSettings().setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
{
//NOTE: this is required only for Android 4.2.2+
mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
}
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
Log.i(TAG, "Progress = "+progress);
mProgressBar.setProgress(progress);
}
});
mWebView.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(TestActivity.this, "Problem loading webpage", Toast.LENGTH_LONG).show();
mProgressBar.setVisibility(View.GONE);
}
public void onPageFinished(WebView view, String url) {
mProgressBar.setVisibility(View.GONE);
}
});
}
@Override
protected void onResume() {
super.onResume();
mWebView.loadUrl("file:///android_asset/html5video.html");
}
Android 4.0.3 NOTA
ho continuato a correre nella fastidiosa eccezione java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.
Per fortuna, non ha influenzato la riproduzione di video.
fonte
2014-01-16 19:46:25
Sono confuso. Stai dicendo che funziona, o non funziona? – robertc
Sto dicendo che funziona quando clicchi sul comando play. Ma l'uso di video.play() non funziona. – Harry
In altre parole, la riproduzione manuale del video funziona. programmaticamente non lo fa – Harry