Android 和 JS交互方法初探
起初有个需求,就是需要监听网页的图片点击,然后图片单独跳转到另一个页面单独显示
这里就需要用JS和Android Native方法之间的通信
先说上面的解决办法之前先引出两个Android的方法
1: addJavascriptInterface(Object obj, String interfaceName)
2:evaluateJavascript(String script, ValueCallback<String> resultCallback)
这个是两个webview和js代码交互的非常重要的方法
1:第一个 方法:这个方法是往webview里加入一个可使用的native的接口类,js代码里可以直接调用声明了@JavascriptInterface的方法,以此就可以在js网页代码里调用native方法了,比如你可以再js里点击一个button打开一个AndroidNative的Dialog。
上代码解释下,比如这个@JavascriptInterface方法,方法写在了一个总类里
private final class Client { @JavascriptInterface
public void showMsgFromAndroid(String msg) { //如要返回值可把void改为String等等类型
AlertDialog.Builder builder = new AlertDialog.Builder(ScriptActivity.this);
builder.setTitle("来自安卓的对话框").setMessage(msg);
builder.create().show();
}
}
然后webview使用呢?
这样------>
webview.addJavascriptInterface(new Client(), "client");
这样你就可以在h5代码里用js 直接使用client(注意是client,我感觉就相当于一个实例好的对象名字传给了js代码吧),这样在我们的h5代码里使用
<script type="text/javascript">
function showAndroidDialog(){
client.showMsgFromAndroid("网页要求安卓弹窗");
}
</script> <button onclick="javascript:showAndroidDialog()"><font size='5'>让android弹窗</font></button><br>
这样就实现了在h5的js里调用native方法。addJavascriptInterface(Object obj, String interfaceName) 就是这个用法
2:第二个方法:evaluateJavascript 我理解的就是从js里接收一个字符串回调,第一个是h5 的js代码里的js方法函数名,第二个是需在native方法里实现的回调
也就是我js想返回一个string给native就可以在js里写一个有string返回值的函数,然后在Native里监听此返回,js如下
<script type="text/javascript"> function getMsgFromWeb(){
return "这是网页返回的字符串";
} </script>
java代码里
webview.evaluateJavascript("getMsgFromWeb()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
AlertDialog.Builder builder = new AlertDialog.Builder(ScriptActivity.this);
builder.setTitle("来自安卓的对话框").setMessage(UnicodeToString(value));
builder.create().show();
}
});
这样就完成了,native从js里接收消息。
3:那么还有一个问题,怎么通过native方法让js弹窗出来呢,我们实现了js让Android弹窗,js返回数据给native,那么怎么让js弹窗呢,就是h5自己对话框,其实很简单,直接调用
webview.loadUrl("javascript:showMsgFromWeb()");
loadUrl除了是读取一个网页之外,loadUrl还可以直接调用js端的一个方法,这样就可以直接调用alert让网页弹窗出来了
<script type="text/javascript"> function showMsgFromWeb(){
alert("这是网页弹出的对话框");
} </script>
4:还有一个是如何让Android方法传字符串给Js呢,其实答案就在第一个方法里面,里面有个client,我们可以写一个有String返回的方法,然后直接在Js里调用client.xxx方法,然后就可以获得此String字符串了
java的方法
private final class Client { @JavascriptInterface
public String getMsgFromAndroid(String msg) {
return "这是Android返回的字符串:"+msg;
} }
js方法
function showMsgInAndroid(){
var result = client.getMsgFromAndroid("这是网页给的参数");
alert(result);
}
这样就完成了从Android native端获取字符串
Android 和 JS交互方法初探的更多相关文章
- Android与JS交互,json传参问题
一.JS调用Android的方法 JS调用安卓的方法,并且传递的参数为json格式的字符串(JSONObject.toString()), 例如: var json = {"name&quo ...
- Android与js交互拍照上传资料
应用场景:h5通知android端拍照,选相册,然后将图片路径上传成功之后,获取到网络路径,将此路径返还给h5界面,并展示出来. android与js快速交互 效果图如下: 1.在Activity ...
- Webview Android与js交互
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML) ...
- Android与js交互实例
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML) ...
- Android与js交互
本文转载自:http://blog.csdn.net/it1039871366/article/details/46372207 一文. Android 中可以通过webview来实现和js的交互,在 ...
- android 和 js 交互
1.html代码 <script type="text/javascript"> function javacalljs(){ document.getElementB ...
- android与JS交互,互相调用方法,跳转到网页
在main下面New - Folder - Assets Folder,在Assets下面新建一个js_android.html <html><head> <meta h ...
- Android—android与js交互以及相互传参
Android中可以通过WebView来实现与js的交互,让用户可以在android客户端看到js写的页面,接下来为大家介绍的就是怎样实现此功能: 首先android项目目录下有“assets”文件夹 ...
- android webview js交互 第一节 (java和js交互)
转载请注明出处 挺帅的移动开发专栏 http://blog.csdn.net/wangtingshuai/article/details/8631835 在androi ...
随机推荐
- (转) AI突破性论文及代码实现汇总
本文转自:https://zhuanlan.zhihu.com/p/25191377 AI突破性论文及代码实现汇总 极视角 · 2 天前 What Can AI Do For You? “The bu ...
- Ubuntu fcitx CPU占用率很高解决方法
在Ubuntu中,有时候电脑的风扇突然狂装,用 pidstat -u 5 1 命令查看后台应用的资源占用情况,发现fcitx的占用率接近百分之百. 原因是搜狗云输入的问题,关闭后,在用kill命令干掉 ...
- 对象扩展运算符(…)与rest运算符
对象扩展运算符(…) 当编写一个方法时,我们允许它传入的参数是不确定的.这时候可以使用对象扩展运算符来作参数,看一个简单的列子: function xzdemo(...arg){ console.lo ...
- 常用linux,DOS命令——持续更新
cd 文件夹名 进入某个文件夹 cd ../ 退出该级目录进入上一级 cd ../../ 退出该级目录进入上上级 cd ../../demo 退出该级目录进入上上级的目录 d: 回车 进入d盘 ls ...
- 1、Python中的正则表达式(0601)
回顾: 1.文件对象: open('file','mode','bufsize') read,readline,readlines,write,writelines,flush,seek,tell 2 ...
- 【Java】【泛型】
泛型的优点使⽤泛型有下⾯⼏个优点:1.类型安全2.向后兼容3.层次清晰4.性能较⾼,⽤GJ(泛型JAVA)编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进⼀步优化提 ...
- vue运行报错--dependency
ERROR Failed to compile with 1 errors 11:17:27 This dependency was not found: 解决方法:把报错所缺少的依赖都装上 如 xx ...
- SPOJ QTREE Query on a tree 树链剖分+线段树
题目链接:http://www.spoj.com/problems/QTREE/en/ QTREE - Query on a tree #tree You are given a tree (an a ...
- class与struct的区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能: ①struct能包含成员函数吗? 能! ②struct能继承吗? 能!! ...
- java常用技术名词解析
1.1 token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便 将此Token返回给客户端,以后客户端只需带上这个Token前来请求数 ...