Android WebView에서 HTML5 페이지에 .mp4 비디오를 표시하면 파일을 원격 URL에서 검색 할 때 비디오 및 오디오가 모두 제대로 재생됩니다. 장치의 "/ mnt/sdcard/...."경로에서 동일한 미디어 파일을 재생하려고하면 미디어 파일의 오디오 부분 만 재생됩니다. 이것에 대한 어떤 생각? 비슷한 것을 경험 한 사람 (그리고 잘하면 해결 된 사람)이 있습니까? 네트워크를 통해 검색 할 때 비디오가 보이지만 코덱 문제 일 수 있습니까? 비디오가 WebView에서 끝나기 전에 어떻게 든 조작되거나 변형 된 네트워크를 통해 반환됩니까?Android WebView에서 HTML5 비디오와 일치하지 않음
다음 코드는 나를 위해 일한답변
, 나는 도 나는 많은 사람들이 같은 문제에 직면하고있다 생각, 그것은 당신이 도움이되기를 바랍니다, 그래서 이것은 내 응용 프로그램 을 실행하는 HTML5 비디오를 얻기 위해 무슨 짓 WebView.
절차으로 안내해 드리겠습니다.
내 앱의 WebView 안에 여러 HTML 페이지를 차례로로드하려고했습니다. 이 HTML 페이지에는 오디오 뒤에 비디오 또는 비디오 다음에 오디오이옵니다.
다음은 이러한 HTML 페이지 중 하나의 예입니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<title>screen2</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/main-v1.css" rel="stylesheet" type="text/css">
<link href="css/screen2-v1.css" rel="stylesheet" type="text/css">
<script src="js/jQueryTest.js"></script>
</head>
<body>
<audio id="audio1" src="audio/screen2_a.mp3"></audio>
<video id="video1" src="video/mov_bbb.mp4"></video>
</body>
</html>
는 지금은 HTML 페이지 안드로이드과
자바 스크립트 사이의 인터페이스 역할을하는 클래스를 만들었습니다. 여기 는 package com.example.dms;
import java.io.IOException;
import com.example.dms.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
public class JsHandler {
Activity activity;
String TAG = "JsHandler";
WebView webView;
public JsHandler(Activity _contxt,WebView _webView) {
activity = _contxt;
webView = _webView;
}
/**
* This function handles call from JS
*/
@JavascriptInterface
public void initVideo()
{
webView.loadUrl("javascript:playVideo()");
}
public void initAudio()
{
webView.loadUrl("javascript:playAudio()");
}
/**
* This function handles call from Android-Java
*/
public void javaFnCall(String jsString) {
final String webUrl = "javascript:diplayJavaMsg('"+jsString+"')";
// Add this to avoid android.view.windowmanager$badtokenexception unable to add window
if(!activity.isFinishing())
// loadurl on UI main thread
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
webView.loadUrl(webUrl);
}
});
}
/**
* function shows Android-Native Alert Dialog
*/
public void showDialog(String msg){
AlertDialog alertDialog = new AlertDialog.Builder(activity).create();
alertDialog.setTitle(activity.getString(R.string.app_dialog_title));
alertDialog.setMessage(msg);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,activity.getString(R.string.ok_text), new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,activity.getString(R.string.cancel_text), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
alertDialog.show();
}
}
이것은 웹보기 내부의 HTML 페이지를로드 내 MainActivity의 코드, 내 프로젝트 SRC 폴더에 JsHandler.java라는 JavaScriptInterface 클래스입니다
public class MainActivity extends Activity{
//WebView Variables
private JsHandler _jsHandler;
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webView);
myWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_DOWN && !view.hasFocus()) {
view.requestFocus();
}
return false;
}
});
initWebView();
}
private void initWebView(){
//Tell the WebView to enable javascript execution.
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setBackgroundColor(Color.parseColor("#808080"));
//Set whether the DOM storage API is enabled.
myWebView.getSettings().setDomStorageEnabled(true);
//setBuiltInZoomControls = false, removes +/- controls on screen
myWebView.getSettings().setBuiltInZoomControls(false);
myWebView.getSettings().setPluginState(PluginState.ON);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setAppCacheMaxSize(1024 * 8);
myWebView.getSettings().setAppCacheEnabled(true);
_jsHandler = new JsHandler(this, myWebView);
myWebView.addJavascriptInterface(_jsHandler, "JsHandler");
myWebView.getSettings().setUseWideViewPort(false);
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.setWebViewClient(new WebViewClient());
// these settings speed up page load into the webview
myWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.requestFocus(View.FOCUS_DOWN);
myWebView.loadUrl("file:///android_asset/screen2.html");
}
}
귀하의 로드 할 페이지는 프로젝트의 자산 폴더에 있습니다. 내가 무슨 짓을
내가있는 미디어 파일을 배치되는 MNT/SDCARD/I가 태그 따라 오디오 및 비디오의 SRC 속성을 변경해야하는 경우
. 이전에 내가 작성한 JavaScriptInterface 클래스도 언급했듯이이 클래스를 사용하여 HTML 대신 오디오 또는 비디오를 Java에서 재생하도록 호출합니다.
그래서, 여기에) (새로운 HTML 페이지가있는 HTML 페이지가로드가 완전히, 나는 초기화라고 한 때 여기에서 무슨 일이 일어나고 있는지 설명하기 위해
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<title>screen2</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/main-v1.css" rel="stylesheet" type="text/css">
<link href="css/screen2-v1.css" rel="stylesheet" type="text/css">
<script src="js/jQueryTest.js"></script>
<script>
function playVideo()
{
var cV = document.getElementById("video1");
cV.addEventListener('ended', function()
{
cV.removeEventListener('ended');
playAudio();
}, false);
cV.play();
}
function playAudio()
{
var cA = document.getElementById("audio1");
cA.addEventListener('ended', function()
{
cA.removeEventListener('ended');
playVideo();
}, false);
cA.play();
}
function init(){
JsHandler.initVideo();
}
</script>
<script>
$(document).ready(function(){
init();
});
</script>
</head>
<body>
<audio id="audio1" src="/mnt/sdcard/Android/data/com.exapmle.dms/files/resources/audio/screen2_a.mp3"></audio>
<video id="video1" src="/mnt/sdcard/Android/data/com.exapmle.dms/files/resources/video/mov_bbb.mp4"></video>
</body>
</html>
같은 모습입니다; 메소드가 HTML 페이지에 정의되어 있습니다.
이 메서드는 initVideo()를 호출합니다. JsHandler 클래스
당신이 볼 수 있듯이,이 initVideo()에 정의 된 방법; 메서드는 playVideo()를 호출합니다. 메소드가 HTML 페이지에 정의되어 있습니다.
playVideo();를 호출하지 않는 이유가 궁금 할 수 있습니다. 메서드를 직접 페이지로드, 잘 시도하고 그것을 작동하지 않았다 (atleast 나를 위해). // 요점 :
나는 당신을 도와 주거나 웹보기
- 1. Android 의도가 일치하지 않음
- 2. Android 4.4 브라우저/webview에서 HTML5 날짜 입력
- 3. Html5 비디오 로컬은 Android webview에서 작동하지 않습니다.
- 4. 비디오와 오디오 결합 - Android
- 5. HTML5 navigator.online이 WebView에서 작동하지 않습니다.
- 6. Android : 문자열이 같고 일치하지 않음
- 7. meteor 세션이 html5 비디오와 함께 작동하지 않습니다.
- 8. Android 기본 테마가 Android 교육과 일치하지 않음
- 9. Android WebView에서 HTTPS 콘텐츠를 캐싱하지 않음
- 10. HTML5 비디오와 나는 (디자인의 배경) HTML5 비디오에 대한이 코드를 사용하고
- 11. Android WebView에서 터치 이벤트
- 12. android에서 webview에서 HTML5 비디오를 실행하는 방법
- 13. WebView에서 HTML5- 비디오를 재생 하시겠습니까?
- 14. 비디오가 android webview에서 재생되지 않습니다.
- 15. HTML5 <audio> 태그가 Android Webview에서 작동하지 않습니다.
- 16. android webview에서 swiffy에서 대화 형 html5 콘텐츠를 로컬로 재생합니다.
- 17. Android WebView에서 HTML5 동영상 및 YouTube 동영상을 재생하는 방법은 무엇인가요?
- 18. Android Webview에서 CSS를 구현하지 않습니다.
- 19. javax.net.ssl.SSLException : 인증서의 호스트 이름이 일치하지 않음 : android
- 20. Android facebook 해시 키가 잘못되었으며 일치하지 않음
- 21. gradle.xml 플랫폼간에 일치하지 않음
- 22. android MediaControler가 URL의 비디오와 작동하지 않습니다.
- 23. HTML5 오디오가 Android 2.3.6에서 실행되지 않음
- 24. Html5 미디어 플레이어가 포함되지 않음 - android
- 25. Android HTML5 동영상이 재생되지만 표시되지 않음
- 26. Javascript - Android 기기에서 HTML5 오디오가 재생되지 않음
- 27. Android webview에서 가끔 콘텐츠를로드합니다.
- 28. android - webview에서 전화 걸기
- 29. android webview에서 URL을로드하지 않습니다.
- 30. android 용 webview에서 geolocation
에 로딩 HTML 5 비디오에서 비슷한 문제에 직면하고있어 다른 사람이 (이 예에 https를 참조하면 하드웨어 가속 매니페스트에서 활성화 할 수 있기를 바랍니다. github.com/Offbeatmammal/3718414) – Offbeatmammal