大佬教程收集整理的这篇文章主要介绍了与Android WebView中的HTML5视频不一致,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我将引导您完成该程序.
我想在我的App的WebView中一个接一个地加载多个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>
现在我创建了Class作为Android页面和HTML页面中Javascript之@L_674_24@接口.
这是我的Projects src文件夹中名为JsHandler.java的JavaScripTinterface类
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(); } }
这是我的MainActivity中的代码,它在WebView中加载HTML页面
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"); }
}
这是考虑到要加载的HTML页面驻留在项目的assets文件夹中.
我做的是将媒体文件放在mnt / sdcard /中
我需要相应地更改音频和视频标签的src属性.另外正如我前面提到的我创建的JavaScripTinterface类,我将使用该类调用音频或视频来播放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页面完全加载时,我调用了init(); HTML页面中定义的方法.
此方法调用initVideo(); JsHandler类中定义的方法
如你所见,这个initVideo();方法调用playVideo(); HTML页面中定义的方法.
您可能想知道为什么不调用playVideo();方法直接在页面加载,
好吧,我已经尝试过它并没有用,(至少对我来说).
我希望它可以帮助您或任何在WebView中加载HTML 5视频时遇到类似问题的人
以上是大佬教程为你收集整理的与Android WebView中的HTML5视频不一致全部内容,希望文章能够帮你解决与Android WebView中的HTML5视频不一致所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。