hybrid App开发也不是什么新鲜事了,其中native和h5之间的交互则是必不可少的。Android中是如何和H5交互的?
1、webView加载页面

我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同:

//例如:加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:加载网页
mWebView.loadUrl("http://www.baidu.com")

如果只是这样调用mWebView.loadUrl()加载的话,那么当你点击页面中的链接时,页面将会在你手机默认的浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置setWebViewClient:

mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {mWebView.loadUrl(url);return true;}}});
2、Android本地通过Java调用HTML页面中的JavaScript方法

想要调用js方法那么就必须让webView支持

    WebSettings webSettings = mWebView.getSettings();//设置为可调用js方法webSettings.setJavaScriptEnabled(true);

若调用的js方法没有返回值,则直接可以调用mWebView.loadUrl("javascript:do()");其中do是js中的方法;若有返回值时我们可以调用mWebView.evaluateJavascript()方法:

 mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String value) {Log.e(TAG, "onReceiveValue value=" + value);}});

js代码如下:

<script type="text/javascript">function sum(a,b){return a+b;}function do(){document.getElementById("p").innerHTML="hello world";}
</script>
2、js调用Android本地Java方法

在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法

 public class JsInteration {@JavascriptInterfacepublic String back() {return "hello world";}
}

定义完这个方法后再调用mWebView.addJavascriptInterface()方法:

 mWebView.addJavascriptInterface(new JsInteration(), "android");

那么在js中怎么来调用呢?

<script type="text/javascript">function s(){//调用Java的back()方法var result =window.android.back();document.getElementById("p").innerHTML=result;}</script>
4、拦截HTML页面中的点击事件
mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {//判断url拦截事件if (url.equals("file:///android_asset/test2.html")) {Log.e(TAG, "shouldOverrideUrlLoading: " + url);startActivity(new Intent(MainActivity.this,Main2Activity.class));return true;} else {mWebView.loadUrl(url);return false;}}});
以上就是Java调用js方法以及js调用Java方法的实现交互方式中的一种。下面给出完整代码:
mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebView = (WebView) findViewById(R.id.webView);mWebView.loadUrl("file:///android_asset/test.html");WebSettings webSettings = mWebView.getSettings();webSettings.setJavaScriptEnabled(true);mWebView.addJavascriptInterface(new JsInteration(), "android");mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if (url.equals("file:///android_asset/test2.html")) {Log.e(TAG, "shouldOverrideUrlLoading: " + url);startActivity(new Intent(MainActivity.this,Main2Activity.class));return true;} else {mWebView.loadUrl(url);return false;}}});
}
//Android调用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String value) {Log.e(TAG, "onReceiveValue value=" + value);}});
}
public class JsInteration {@JavascriptInterfacepublic String back() {return "hello world";}
}
}
test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">function sum(a,b){return a+b;}function s(){var result =window.android.back();document.getElementById("p").innerHTML=result;}</script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2.html">点击</a>
<p id="p"></p>
</body>
</html>

作者:YouJZ
链接:http://www.jianshu.com/p/a25907862523
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/Free-Thinker/p/7390459.html

Android和H5交互-基础篇相关推荐

  1. Android 和 H5 交互-框架篇

    Android 和 H5 交互-框架篇 2017-08-01 YouJZ code小生 作者 | YouJZ 地址 | http://www.jianshu.com/p/02afb387b6b4 声明 ...

  2. Android 与 H5 交互基础普及

    文章目录 前言 创建一个WebView页面 WebView 与 H5交互 H5 调用 WebView 中的方法 WebView 调用 H5 中的方法 另外一些重要操作 处理页面导航 处理页面历史 总结 ...

  3. Android 系统(229)---Android与h5交互专题

    [Android开发进阶系列]Android与h5交互专题 1 交互原理 1.1 webview如何加载H5页面 我们都知道在Android中是通过webView来加载html页面的,根据HTML文件 ...

  4. Android与H5交互探索之旅

    周一清早,某技术(对接我司业务SDK的技术)在有我司boss的微信群火急火燎地艾特我说为什么H5的回调 SDK 这边收不到?看到消息的我内心瞬间那是焦虑的一P,飞奔公司打开电脑双击IDE,心想别人用的 ...

  5. android 基础应用程序,android应用程序基本实现(基础篇).ppt

    <android应用程序基本实现(基础篇).ppt>由会员分享,可在线阅读,更多相关<android应用程序基本实现(基础篇).ppt(22页珍藏版)>请在人人文库网上搜索. ...

  6. 深入了解Android蓝牙Bluetooth——《基础篇》

    深入了解Android蓝牙Bluetooth--<基础篇> 什么是蓝牙?   也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的 ...

  7. Android面试题Java基础篇

    Android面试题Java基础篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐,更多精彩内容可以关注微信公众号(Android高级编程):android-tech 系列文章目录: ...

  8. 极光小课堂 | 极光推送之 Android 客户端使用指南——基础篇

    " 本文中涉及到的所有代码现已在 Github 上开源,地址:https://github.com/xuexiangjys/JPushSample" 01 前言 - 极光推送是国内 ...

  9. 关于原生android与H5交互的方法

    文章目录 原生android与H5交互 android调用H5方法 H5调用android 原生android与H5交互 前面讲解方法,结尾放代码 android调用H5方法 首先需要一个WebVie ...

最新文章

  1. 调试uIP出现死机问题
  2. 用java怎么开发图片标注工具_java 图片处理工具 测试
  3. 96根电极每秒测量3万次,大脑植入物首次帮助瘫患者控制肌肉!
  4. 解决tomcat shutdown时的地址被占用问题
  5. 2、leetcode278 第一个错误的版本**
  6. SQLite shell操作
  7. 上拉加载更多后台数据_微信小程序端操作云数据库
  8. Python工作笔记-统计文件夹内只有1个文件的文件夹
  9. 南大cssci期刊目录_最新版CSSCI来源期刊目录(2019-2020)及增减变化!【南大核心】...
  10. C# 字典键值对排序 属性的key和value排序
  11. 如何利用matlab显示图像的方向矢量图
  12. 计算机一级excel题库百度云,全国计算机等级考试一级上机Excel题库
  13. Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue
  14. Adaptive icon 二 设计自适应图标
  15. debain下装memcached
  16. 苹果手机怎么一屏两用
  17. 滴水逆向三期笔记与作业——02C语言——02数据类型
  18. php小蛋白配方,卤蛋多种详细制作配方
  19. Tomcat服务器的默认端口是多少?怎样修改tomcat的端口?
  20. 【ESP32_02】【DAC输出正弦波】

热门文章

  1. mysql root用户可以同时几个人连接_重学MySQL系列(四):10分钟快速掌握MySQL用户与权限管理
  2. oracle stream参数,oracle stream实验(双向复制)
  3. linux显示 cron 服务是否正在运行_通过Linux系统自带日志监控系统安全
  4. 网游源码完整服务端_【每日源码】微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。...
  5. 使用遗传算法解决N皇后问题
  6. python string_Python String center()
  7. [msi]Cannot open database file. System error -2147287035
  8. 一个有助于理解事件冒泡和事件捕获的例子
  9. 服务器指定网卡进行备份数据避免影响业务口
  10. Web系统测试Web安全性测试