私はAndroidWebViewでdailymotion.comビデオを再生しようとしています。
Android 4.0.1では、マニフェストファイルでandroid:hardwareAccelerated = "true"を設定すると、正常に動作します。
Android 2.3.7で使用すると、最初のフレームでビデオがフリーズし、logcatで次のエラーが表示されます。
E/Web Console(14426): Uncaught Error: INDEX_SIZE_ERR: DOM Exception 1 at http://static1.dmcdn.net/js/gen/widget/pack/player.js.v43e491a06c202f1e6:1
Android 4.0.1の組み込みブラウザーで再生すると、ビデオはブラウザー内で再生されます。Android 2.3.7の組み込みブラウザで再生すると、ビデオが外部メディアプレーヤーを開いているように見えます。
これは私が使用しているコードです:
mVideoWebView.setWebChromeClient(new WebChromeClient());
setWebViewSettings(mVideoWebView);
String data_html = "<!DOCTYPE HTML> <html xmlns=\"http://www.w3.org/1999/xhtml\"
xmlns:og=\"http://opengraphprotocol.org/schema/\"
xmlns:fb=\"http://www.facebook.com/2008/fbml\">
<head></head>
<body style=\"margin:0 0 0 0; padding:0 0 0 0;\">
<iframe src=\"http://www.dailymotion.com/embed/video/xu4vre\"
width=\"300\" height=\"162\" frameborder=\"0\">
</iframe> </body> </html> ";
mVideoWebView.loadData(data_html, "text/html", null);
public static void setWebViewSettings(WebView webview) {
WebSettings webSettings = webview.getSettings();
webSettings.setPluginState(PluginState.ON);
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setLoadWithOverviewMode(false); // zoom y/n
webSettings.setUseWideViewPort(true); // true = like desktop
webSettings.setPluginsEnabled(true);
//webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccess(true);
//webSettings.setAllowFileAccessFromFileURLs(true);
//webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setDatabaseEnabled(true);
webSettings.setGeolocationEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setDomStorageEnabled(true);
}
ソリューションの鍵はWebChromeClientにあると思います。行を削除するmVideoWebView.setWebChromeClient(new WebChromeClient());
と、Android 4でもビデオが再生されず、エラーが表示されません。