一、WebView介绍转载自:http://www.2cto.com/kf/201608/536207.html
我们都知道我们的Native是可以和web页面中的JS进行交互的,而且方法都差不多,那我们就来看看他们的差别和使用场景吧
首先我们必须设置webView.getSettings().setJavaScriptEnabled(true);
1.Webview里面的界面调用Native Java代码(即调用本地代码)
protected class AndroidJsInterface{
private Context context;
public AndroidJsInterface(Context context){
this.context = context;
}
@JavascriptInterface
public void showToast(String msg){
ToastUtil.showShort(context,msg);
}
}
值得注意的是,在Android4.2开始,我们必须田间@JavascriptInterface注解,我们的代码才能够被Js所调用。
然后我们就需要把这个接口类传递给Webview,然Js可以调用:webView.addJavascriptInterface(new AndroidJsInterface(this),"Android");
这个方法的第二个参数是任意一个String类型的值,这个字会关系到我们后面调用接口中的方法。
下面就是我在Html页面中定义了一个Button,让点击的时候调用Native的Toast, 然后就是按钮,我们绑定了它的点击事件:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function showToast(){
Android.showToast("pupup window from HTML5!");
}
</script>
<meta charset="utf-8">
<title>first html5 page</title>
<style type = "text/css">
p{font-size:150%;}
</style>
</head>
<body>
<header>
<h1>title</h1>
</header>
<section>
<button id ="test" onclick = "showToast()">click here show toast</button>
<article>
<p>this is a picture</p>
</article>
<figure class="marginRight"><img src ="http://avatar.csdn.net/D/1/F/1_qq_24956515.jpg" alt="Image"/></figure>
</section>
</body>
</html>
使用时代码里写上:
String myTest = "file:///android_asset/html_test22.html";
webView.loadUrl(myTest);
这里是使用本地的Html文件,如果有不懂请参考这篇文章:
http://blog.csdn.net/u011150924/article/details/53079916
2.Native调用Webview中的Js
还记得我们前面讲过的WebViewClient吗?我们这里就需要先实现它,然后在它的onPagerFinish()回调函数中进行处理,这样是为了保证我们代码的正常运行,因为在以往的时候,当我们没有在这个回调当中执行操作,而是直接在LoadUrl()后就对页面进行操作,结果发现我们的代码没有起作用,最后发现是页面没有加载完成,而我们就去执行代码,所以造成了这种没必要的操作。
为了测试Native调用Js,我们现在Html页面中定义一个方法和一个Span标签:
在方法中我们让调用show()方法后,将Span标签里面的内容改为一个字符串,并弹出一个alert。
在Native中我们通过如下的LoadUrl()的方法调用这个函数:
就是这么简单,我们就实现了Native到Js的调用,但是我们用一个需求,我们向得到一个回调怎么办了?Google在Android4.4为我们新增加了一个新方法,这个方法比loadUrl方便,而且比loadUrl效率更高,因为每次load都会将页面刷新一次。
由于新增加的方法是4.4才引入的,所以我们使用的时候需要添加版本的判断:
、
如果是4.4之前的老版本,我们才用loadUrl的方式:
3.我们在开始的时候贴出了一个我们使用setJavaScriptEnable()的警告,那我们怎么来处理这个问题了,对于大多数的应用其实是不需要的,如果需要我们可以使用一种安全的方式,例如WebChromeClient中有一个onJsPrompt的回调方法,我们可以将我们需要传递的js命令转换为一种协议的模式,通过这个回调函数传递到我们的Native中,这样就避免了我们直接与代码交互,具体的过程在这里就不介绍了,下面提出一个该框架的github地址,大家需要的时候可以去下载:https://github.com/pedant/safe-java-js-webview-bridge
三、VedioView简单使用转载自:http://blog.csdn.net/chenzheng_java/article/details/6258456
video.xml