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 ...
随机推荐
- Bootstrap3基础 disabled 多选框 鼠标放在方框与文字上都出现禁止 标识
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- Android studio 搭建测试环境 创建虚拟机
1.打开android studio2.0 ,选择AVD Manger 2.选择Create Virtual Device 3.在左侧Category中选择Phone,然后选择自己喜欢的手机型号,点击 ...
- bzoj 2527: [Poi2011]Meteors
昨天写了一晚,越写复杂度越感觉不对,早上一想果然是假的. (这里n,m,k我就不区分了) 首先一个城市的询问可以很容易的二分 check用树状数组维护区间(区间修改,单点查询的那种) 一次是\(O(n ...
- 3. Elements of a Test Plan
https://jmeter.apache.org/usermanual/test_plan.html This section describes the different parts of a ...
- oracle 之 如何链接别人电脑的oracle
1.首先确保两台电脑是在同一个局域网内,可以通过cm命令窗口 ping 对方电脑的ID,若是没问题则表示可以连接 2.接下来通过配置来首先连接对方的电脑 其实在后面还有一个是否创建新的额服务名的操作, ...
- 比赛总结——atcoder beginner contest 109
第一次AK的ABC 虽然题非常简单 但是值得纪念一下 T1 一道很水的题 不存在做法 纯粹乱跑 但是我把Yes打成YES了,哭唧唧 #include <cstdio> #include & ...
- 题解——loj6280 数列分块入门4 (分块)
分块维护一个区间和 然后记得更新的时候左边角块的tag不要打错到右边角块 #include <cstdio> #include <algorithm> #include < ...
- 【sql server】索引详解
索引可以理解为一种特殊的目录结构. sql server提供两种索引形式: 聚集索引和非聚集索引. 怎么理解这两种形式. 拿我们常用的字典举例来说, 一个字典好比数据库中的一个表.那么当我们想从字典中 ...
- ISE14.7兼容性问题集锦https://www.cnblogs.com/ninghechuan/p/7241371.html
ISE14.7兼容性问题集锦 对于电子工程师来说,很多电路设计仿真软件都是特别大的,安装下来一般都是上G,甚至几十G,而且win7的兼容性也是最好的,不愿意升级win10是因为麻烦,而且没有必要,对于 ...
- ssh中的 Connection closed by ***
另一台电脑的 mac/windows10/win7 都可以连接,就这台电脑不可以,但是能 ping 通, ssh 时总是 Connection reset by xxx 或 Connection cl ...