ฉันรวมวิธีที่เพื่อนของฉันแก้ปัญหาการแสดงวิดีโอใน HTML ใน Nexus One:
ฉันไม่สามารถทำให้วิดีโอเล่นแบบอินไลน์ได้ จริงๆแล้วหลาย ๆ คนบนอินเทอร์เน็ตพูดถึงอย่างชัดเจนว่าการเล่นวิดีโอแบบอินไลน์ใน HTML นั้นรองรับตั้งแต่ Honeycomb และเรากำลังต่อสู้กับ Froyo และ Gingerbread ... สำหรับโทรศัพท์ขนาดเล็กฉันคิดว่าการเล่นแบบเต็มหน้าจอนั้นเป็นธรรมชาติมาก - อย่างอื่นก็ไม่ค่อยมีให้เห็น . เป้าหมายคือการเปิดวิดีโอแบบเต็มหน้าจอ อย่างไรก็ตามวิธีแก้ปัญหาที่นำเสนอในชุดข้อความนี้ไม่ได้ผลสำหรับเรา - การคลิกที่องค์ประกอบทำให้ไม่มีอะไรเกิดขึ้น นอกจากนี้ยังมีการแสดงการควบคุมวิดีโอ แต่ไม่มีโปสเตอร์แสดงดังนั้นประสบการณ์ของผู้ใช้จึงแปลกกว่า สิ่งที่เขาทำมีดังต่อไปนี้:
แสดงโค้ดเนทีฟลงใน 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");
activity.startActivity(intent);
}
}
จากนั้นใน HTML เองเขาก็ยังคงล้มเหลวทำให้แท็กวิดีโอเล่นวิดีโอได้ ดังนั้นในที่สุดเขาจึงตัดสินใจเขียนทับ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>
แน่นอนคุณต้องเพิ่มคำจำกัดความของฟังก์ชันจาวาสคริปต์ในส่วนหัวของหน้าด้วย:
<script>
function playVideo(video){
window.JSInterface.startVideo(video);
}
</script>
ฉันตระหนักดีว่านี่ไม่ใช่โซลูชัน HTML อย่างเดียว แต่เป็นวิธีที่ดีที่สุดที่เราสามารถทำได้สำหรับโทรศัพท์ประเภท Nexus One เครดิตทั้งหมดสำหรับการแก้ปัญหานี้ไปที่ Dimitar Zlatkov Dimitrov