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 662 div1
problem1 link 首先枚举差值$d$,判断是否存在一个序列任意连续两个之间的差值小于$d$. 首先将数字排序,然后从小到大依次放置每一个数字.每个当前的数字有两个位置可以放,当前序列的前面或 ...
- topcoder srm 713 div1
problem1 link 如果$a^{b}=c^{d}$,那么一定存在$t,x,y$使得$a=t^{x},c=t^{y}$.一旦$t,x,y$确定,那么可以直接计算出二元组$b,d$有多少.对于$t ...
- 全排列+字符串查找|扑克排序|2014年蓝桥杯A组题解析第六题-fishers
标题:扑克序列 A A 2 2 3 3 4 4, 一共4对扑克牌.请你把它们排成一行. 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌. 请填写出所有符合要求的排 ...
- C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法
https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) ...
- 数据集是 seq 文件的处理办法
数据集是 seq 文件的处理办法 2017-03-17 最近下了一个数据集,是 seq 格式的,第一次处理这种数据.使用了官方提供的 matlab 工具包:https://pdollar.github ...
- it做形式主语的句子
1. it was considerate of you to visit my mother every day and (to) bring me your notes to help me wi ...
- 【AI】微软人工智能学习笔记(一)
数据分析平台 01|数据平台概况图示 上面图中所示就是微软人工智能数据平台的相关的技术. 02.1| Cortana Intelligence Suite 从上面图中可以看到, 其中有一个Cortan ...
- Kylin web界面 知识点介绍
Big Data Era: 1.More and more data becoming available on Hadoop2.Limitations in existing Business ...
- 【转载】SeleniumIDE入门
http://www.open-open.com/lib/view/open1452488109558.html
- http协议的状态码解释
一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务器超时 下面提供 HTTP 状态码的完整列表.点击链接可了解详情.您也可以访问 HTTP 状态码上的 ...