ここに、私の友人がNexus OneでHTMLでビデオを表示する問題をどのように解決したかを示します。
ビデオをインラインで再生することはできませんでした。実際、インターネット上の多くの人が、ハニカム以降のHTMLでのインラインビデオ再生がサポートされていることを明示的に述べています。また、FroyoやGingerbreadと戦っていました...また、小さな電話の場合、フルスクリーンで再生するのは非常に自然だと思います。 。したがって、目標はビデオを全画面で開くことでした。ただし、このスレッドで提案されたソリューションは機能しませんでした。要素をクリックしても何もトリガーされませんでした。さらに、ビデオコントロールは表示されましたが、ポスターは表示されなかったため、ユーザーエクスペリエンスはさらに奇妙でした。それで彼がしたことは次のことでした:
JavaScriptを介して呼び出すことができるように、ネイティブコードをHTMLに公開します。
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
コード自体には、ビデオを再生するためのネイティブアクティビティを呼び出す関数が含まれていました。
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
public void startVideo(String videoAddress){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp"); // The Mime type can actually be determined from the file
activity.startActivity(intent);
}
}
次に、HTML自体で失敗を続け、videoタグを機能させてビデオを再生します。したがって、最終的に彼onclick
はビデオのイベントを上書きして、実際の再生を行うことにしました。これはほとんどうまくいった-ポスターが表示されなかったことを除いて。これが最も奇妙な部分です-彼はタグの属性ERROR/AndroidRuntime(7391): java.lang.RuntimeException: Null or empty value for header "Host"
を設定するたびに受信し続けましたposter
。最後に彼は問題を発見しましたが、それは非常に奇妙でした-彼はタグにsource
サブタグを保持していましたvideo
が、それを使用していなかったことが判明しました。そして、奇妙なことに、これが問題の原因でした。次に、video
セクションの彼の定義を見てください。
<video width="320" height="240" controls="controls" poster='poster.gif' onclick="playVideo('file:///sdcard/test.3gp');" >
Your browser does not support the video tag.
</video>
もちろん、ページの先頭にJavaScript関数の定義も追加する必要があります。
<script>
function playVideo(video){
window.JSInterface.startVideo(video);
}
</script>
これは純粋なHTMLソリューションではないことに気づきましたが、Nexus Oneタイプの電話で実現できた最高のソリューションです。このソリューションのすべてのクレジットは、Dimitar Zlatkov Dimitrovに送られます。