여기에 내 친구가 Nexus One에서 HTML로 동영상을 표시하는 문제를 해결 한 방법을 포함합니다.
비디오를 인라인으로 재생할 수 없었습니다. 사실 인터넷상의 많은 사람들이 Honeycomb 이후로 HTML에서 인라인 비디오 재생이 지원된다는 것을 명시 적으로 언급하고 있으며, 우리는 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에게 전달됩니다.