[Android开发] Android和Html5 JavaScript交互了解入门
来源:互联网 发布:外培计划 知乎 编辑:程序博客网 时间:2024/06/11 13:59
一、一些疑问?
1. Android和H5 交互是什么意思?
Android利用WebView加载网页,然后网页中的JavaScript 和 Android原生的Java 互相调用。 为什么要说成和H5交互呢,这只是一种噱头。
2. 为什么学Android也要学H5
Android很软件都有内嵌H5,QQ 微信 微博 淘宝and so on
3. 有什么用处 优势
能同时应用在 android、ios、前端,节约成本,提高开发效率。
4. 实现的原理是什么?
本质是: Java代码和Javascript的调用
H5页面是: Html的扩展,Javascript处理页面的逻辑
二、Java调用js
Android4.4以上使用evaluateJavascript方法调用,4.4以下直接load即可。
/** * 调用网页的javaScript 方法代码 * @param name 用户名 * @param pass 密码 */ private void login(String name,String pass){ //android4.4以及以上可以evaluateJavascript方法, if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ wvContent.evaluateJavascript("javascript:javaCallJsLogin("+"'"+name+"'"+","+"'"+pass+"')",null); }else{ // 4.4 以下 //调用当前网页里面的javaCallJsLogin的js方法,并且传递name和pass这两个参数过去 webView.loadUrl("javascript:javaCallJsLogin("+"'"+name+"'"+","+"'"+pass+"')"); } }
三、JavaScript调用Java
1. 编写接口类
class JsInterface{ /** * 将可以被js调用。方法一定要public,不然调用不了 * JavascriptInterface 兼容高的api */ @JavascriptInterface public void showToast(){ Toast.makeText(LoginActivity.this, "Android代码弹出的Taost", Toast.LENGTH_SHORT).show(); } }
2. WebView添加接口类
在webview loadurl之前添加这个方法
//添加js调用接口类,通过Android这个字段 调用这个类的方法,记得在JsInterface里面的方法上加 @JavascriptInterface webView.addJavascriptInterface(new JsInterface(),"Android");
3. js执行接口类对应的方法
<input type="button" value="点击这里调用Android代码" onclick="window.Android.showToast()"/>
四、例子
1. H5页面调用Android播放视频
Android端代码,loadUrl前先添加js调用接口:
//js通过android这个字段调用JsInterface 里面的代码 wvVideo.addJavascriptInterface(new JsInterface(), "android");
Android端代码,添加js调用方法
class JsInterface { /** * 将会被js调用 * JavascriptInterface 兼容高api * * @param id 视频id * @param path 视频路径 * @param title 视频标题 */ @JavascriptInterface public void playVideo(int id, String path, String title) { if (!path.isEmpty()) { Toast.makeText(VideoActivity.this, path, Toast.LENGTH_SHORT).show(); //调用播放器,注意这里调用系统自带播放器将会播放失败 Intent intent = new Intent(); intent.setDataAndType(Uri.parse(path), "video/*"); startActivity(intent); } else { Toast.makeText(VideoActivity.this, "视频链接为空!", Toast.LENGTH_SHORT).show(); } } }
2. H5页面调用Anrdoid拨打电话
/** * JavaScript调用Android的方法类 */ class JsInterface{ /** * 被js调用,用于加载联系人数据源 */ @JavascriptInterface public void showcontacts(){ Log.e("线程",Thread.currentThread()+""); //注意,这里要在主线程执行哦 wvVideo.post(new Runnable() { @Override public void run() { String json = "[{\"name\":\"天平\", \"phone\":\"18600012345\"}]"; // 调用JS中的方法 wvVideo.loadUrl("javascript:showInfo('" + json + "')"); } }); } /** * js调用,拨打电话 * @param phone 手机号码 */ @JavascriptInterface public void call(String phone) { Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone)); if (ActivityCompat.checkSelfPermission(PhoneActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { return; } startActivity(intent); } }
Html端代码
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>电话演示</title> <script type="text/javascript"> function showInfo(jsondata){ var jsonobjs = eval(jsondata); var table = document.getElementById("personTable"); for(var y=0; y<jsonobjs.length; y++){ var tr = table.insertRow(table.rows.length); var td1 = tr.insertCell(0); var td2 = tr.insertCell(1); td2.align = "center"; td1.innerHTML = jsonobjs[y].name; td2.innerHTML = "<a href='javascript:Android.call(\""+ jsonobjs[y].phone+ "\")'>"+ jsonobjs[y].phone+ "</a>"; } } </script></head><body onload="javascript:Android.showcontacts()"><table border="0" width="100%" id="personTable" cellspacing="0"> <tr> <td width="30%">姓名</td> <td align="center">电话</td> </tr></table></body></html>
Demo下载:
http://download.csdn.net/detail/niubitianping/9621568
1 0
- [Android开发] Android和Html5 JavaScript交互了解入门
- Android和html5交互
- android和JavaScript交互
- Android-Java和HTML5交互-混合开发-优化
- Android原生开发与HTML5交互
- HTML5+Javascript开发Android应用
- android和javascript的交互
- android 和javascript 的交互
- Android Java和JavaScript交互
- Android WebView和JavaScript交互
- Android和html5的js交互
- Android与Javascript交互之入门
- WebView---Android与Javascript交互之入门
- Android与Javascript交互之入门
- Android和HTML5混合开发中android代码与JS交互
- Android与Html5交互
- android与html5交互
- Android+html5交互
- 笔试选择题十八
- 记录学习过程
- [leetcode]31. Next Permutation -Find next greater number with same set of digits
- 详细探究Spark的shuffle实现
- arm学习b,bl指令浅析
- [Android开发] Android和Html5 JavaScript交互了解入门
- String类中的一些常用字符串及其用法
- 1455: 罗马游戏
- 【UML】 概览
- poj2503-Babelfish-STL_map
- 边框border使用系列1_之技巧
- 家庭作业
- 9月4日 考试总结
- leetcode---Restore IP Addresses---回溯