Ở đây tôi kể về cách một người bạn của tôi giải quyết vấn đề hiển thị video bằng HTML trong Nexus One:
Tôi không bao giờ có thể làm cho video phát nội tuyến. Trên thực tế, nhiều người trên internet đề cập rõ ràng rằng phát video nội tuyến trong HTML được hỗ trợ kể từ Honeycomb, và chúng tôi đã chiến đấu với Froyo và Gingerbread ... Ngoài ra đối với điện thoại nhỏ hơn, tôi nghĩ rằng chơi toàn màn hình là rất tự nhiên - nếu không thì không hiển thị nhiều . Vì vậy, mục tiêu là làm cho video mở ở chế độ toàn màn hình. Tuy nhiên, các giải pháp được đề xuất trong chủ đề này không hoạt động với chúng tôi - việc nhấp vào phần tử không được kích hoạt. Hơn nữa, các điều khiển video đã được hiển thị, nhưng không có áp phích nào được hiển thị nên trải nghiệm người dùng thậm chí còn kỳ lạ hơn. Vì vậy, những gì anh ta đã làm là sau:
Hiển thị mã gốc cho HTML để có thể gọi được qua javascript:
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
Bản thân mã, có một chức năng gọi là hoạt động gốc để phát video:
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);
}
}
Sau đó, trong chính HTML, anh ta tiếp tục không làm cho thẻ video hoạt động khi phát video. Vì vậy, cuối cùng anh ấy đã quyết định ghi đè onclick
sự kiện của video, biến nó thành một vở kịch thực sự. Điều này gần như hiệu quả với anh ta - ngoại trừ việc không có áp phích nào được hiển thị. Đây là phần kỳ lạ nhất - anh ta tiếp tục nhận được ERROR/AndroidRuntime(7391): java.lang.RuntimeException: Null or empty value for header "Host"
mỗi khi anh ta đặt poster
thuộc tính của thẻ. Cuối cùng, anh ấy phát hiện ra vấn đề, một điều rất kỳ lạ - hóa ra anh ấy đã giữ source
thẻ phụ trong video
thẻ, nhưng không bao giờ sử dụng nó. Và kỳ lạ chính xác là điều này đã gây ra vấn đề. Bây giờ hãy xem định nghĩa của anh ấy về video
phần này:
<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>
Tất nhiên, bạn cũng cần thêm định nghĩa của hàm javascript vào đầu trang:
<script>
function playVideo(video){
window.JSInterface.startVideo(video);
}
</script>
Tôi nhận thấy đây không hoàn toàn là giải pháp HTML, nhưng là giải pháp tốt nhất mà chúng tôi có thể làm cho loại điện thoại Nexus One. Tất cả các khoản tín dụng cho giải pháp này thuộc về Dimitar Zlatkov Dimitrov.