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 ...
随机推荐
- topcoder srm 695 div1 -3
1.称一个串的子串(连续一段)为$same$当且仅当这个子串所有字符都一样.子串不同当且仅当在原串中的起始位置不同.现在构造一个长度为$n$的只包含字符'a','b'的串$s$,使得$s$满足长度为$ ...
- linux下如何按行将文件切割成多个小文件
答: split -l <行数> <目标文件> <切割后的文件前缀> 举例如下: split -l 1000 jello.txt jello 将jello.txt文 ...
- Ubuntu 18.04 修改gedit的配色方案
下图中的蓝色的注释代码,真是有点让人瞎眼的感觉 去这个网站 https://github.com/mig/gedit-themes/tree/master 下载所有后解压到/usr/share/gtk ...
- 用vim + xdebug 来追踪thinkphp的执行过程
tree命令的使用几个有实际应用的参数 -a 这是默认的 -d: 只显式目录, 不需要显式目录下的文件 -L: 列出显式的深度. 当前目录下的所有东西为第一级... 在tp下, 有多个Common但是 ...
- 终于掌握vim的寄存器和系统剪贴板的使用了- 要安装vim-X11包
vim的系统剪贴板 vim的 加号寄存器 "+ 是和系统剪贴板 相关联的. 加号寄存器和系统剪贴板之间的内容, 可以互相切换. 要把 加号寄存器中的内容, -> 放到/转移到系统剪贴板 ...
- 前缀判断|2013年蓝桥杯B组题解析第五题-fishers
前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 &quo ...
- (转) Dissecting Reinforcement Learning-Part.2
Dissecting Reinforcement Learning-Part.2 Jan 15, 2017 • Massimiliano Patacchiola 原文链接:https://mpatac ...
- SQL四大语句、四大完整性、五大约束
四大语句: 1.数据定义语句: DDL:create.alter.drop.truncate(表结构) 2.数据操纵语句: DML:insert.delete.update.select 3.数据控制 ...
- final、finally、finalize的用法
final: 1.被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承 2.将变量或方法声明为final,可以保证他们在使用的过程中不被修改. 3.被final声明的方法也同样 ...
- oogle advertiser api开发概述——速率限制
速率限制 为了向遍布全球的 AdWords API 用户提供可靠的服务,我们使用令牌桶算法来衡量请求数并确定每秒查询数 (QPS) 速率.这样做的目的是阻止恶意的或不可控的软件大量入侵 AdWords ...