JavaScript 与 Android 交互
2016-04-22 17:40
796 查看
JavaScript 与 Android 交互
前言:随着前端技术越来越火。许多app中不在是简单的android原生应用,加入了很多web页。通过Android的webView加载一个
html。并且我们通常的一些落地页都是用
html显示的。那么对于一些具有特殊功能的落地页。比如具有引导注册功能的,用户点击落地页之后跳转App的注册页面,或者登录页面。那么,这就需要
html和
Android原生进行交互,相互调用。
原理分析
android调用
javascript方法:
直接通过
webView.loadUrl("javascript:show('"+et.getText().toString()+"')");,其实就是直接通过
loadUrl()方法,传入
javascropt:+方法名。
javascript调用
Android方法
定义一个对象,包含
js需要调用方法的定义和实现。
webView.addJavascriptInterface(new Object(), "obj");传入。
js调用。
来个栗子
后面的有点看不清,再补一张图片
白色区域是加载的html,带有显示弹窗和跳转登录,该连接调用android本地方法。
下方输入框和按钮为调用js方法,并传入参数
定义Android对象
首先需要定义一个类,该类主要用于定义一些方法(接口),以便js调用。
private class Object { @JavascriptInterface public void intent2Activity(String activity){ if(activity.equals("login")){ Intent intent = new Intent(MainActivity.this,LoginActivity.class); startActivity(intent); } } @JavascriptInterface public void showDialog(String str){ AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("消息") .setMessage(str) .setPositiveButton("确定",null) .setNegativeButton("取消",null) .create(); dialog.show(); } }
定义了两个方法,一个是跳转
activity的方法,另一个是显示消息的方法。
注意:方法前一定要加上注解
@JavascriptInterface,不然会没有效果。
在Activity中加入
webView,并查找控件,进行一些初始化操作
@SuppressLint("JavascriptInterface") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = ((EditText) findViewById(R.id.et)); //加载页面 webView = (WebView) findViewById(R.id.webView); //允许JavaScript执行 webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDefaultTextEncodingName("utf-8"); // 添加一个对象, 让JS可以访问该对象的方法 webView.addJavascriptInterface(new Object(), "obj"); //找到Html文件,也可以用网络上的文件 webView.loadUrl("file:///android_asset/index.html"); }
webView.addJavascriptInterface(new Object(), "obj");相当于向
html中传入了定义的接口对象,对象名为
obj。
定义Html对象
因为我用的是android studio,所以在
main目录下创建目录
assets,并创建文件
index.html
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript"> <!-- android 调用js--> function show(msg){ var str = document.getElementById("android").innerHTML; document.getElementById("android").innerHTML = str+"<br/>"+msg; } </script> </head> <body> <a href="javascript:obj.showDialog('显示弹窗')">显示弹窗</a> <br/> <br/> <a href="javascript:obj.intent2Activity('login')">跳转登录</a> <br/> <br/> <div id="android"></div> </body> </html>
可以看到在html中我们分别调用了
android中的两个方法,通过
javascript:obj.+方法。
该例子以上传github,有需求者请移步:JavaScript和android相互调用
相关文章推荐
- Android中文API-ViewStub
- 学习笔记(五)探究碎片 Fragment 之一
- Java缓存的Lru算法实现---并对Android util类LruCache的改进
- 详解Android App中的AsyncTask异步任务执行方式
- Android学习(37) -- 自定义控件(2)解决旋转的bug
- 有效控制Android应用程序的耗电量
- Android Base64编码解码
- android AsyncTask介绍
- android 时间获取以及时间格式化
- 值得推荐的android开源框架简介
- Android 使用Json实现服务器与客户端数据的交互
- android学习之handler实现线程间通信
- android使用粒子动画实现炊烟袅袅的效果
- Android - Binder机制 - Binder框架总结
- ListView不会填充完整个界面,想在下方继续添加控件的方法
- 使用Android API最佳实践
- 关于android studio中标题栏的隐藏和显现实现。
- Android下的图片压缩及图片和视频的上传
- Android EventBus源码解析
- Android EventBus使用详解