Android中Java与web通信不是新的技术了,在android公布之初就支持这样的方式,2011年開始流行,而这样的模式开发也称作Hybird模式。

这里对android中的Java与web通信方式做一下总结。Android中有3种方式能够实现Java与web通信。

1、重写WebViewClient

 private class MyWebViewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if (Uri.parse(url).getHost().equals("www.example.com")) {// This is my web site, so do not override; let my WebView load the pageToast.makeText(WebViewClientActivity.this, url, Toast.LENGTH_SHORT).show();return false;}return true;}}

通过shouldOverrideUrlLoading(WebView view, String url)返回的url获取数据

比如:url=“www.example.com?body=loadurl” 能够截取后面的body数据。

在web中调用方式:

 <button οnclick="window.open('www.example.com?

body=loadurl')">showAndroidToast</button>

2、重写WebChromeClient

 final class MyWebChromeClient extends WebChromeClient {@Overridepublic boolean onJsAlert(WebView view, String url, String message, JsResult result) {Log.d("MyWebChromeClient", message);Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show();result.confirm();return true;}@Overridepublic boolean onJsConfirm(WebView view, String url, String message,JsResult result) {// TODO Auto-generated method stubreturn super.onJsConfirm(view, url, message, result);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show();// TODO Auto-generated method stub//return super.onJsPrompt(view, url, message, defaultValue, result);result.confirm();return true;}}

使用onJsAlert或者onJsPrompt,onJsAlert。onJsPrompt分别相应JS中的alert和prompt。

在web中调用方式:

<button οnclick="showAndroidToast('Hello Android!');">showAndroidToast</button><script type="text/javascript">function showAndroidToast(toast) {prompt('js prompt');  }</script>

3、addJavascriptInterface

mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");public class WebAppInterface {Context mContext;/** Instantiate the interface and set the context */WebAppInterface(Context c) {mContext = c;}//在Android 4.2以上的,google作了修正。通过在Java的远程方法上面声明一个@JavascriptInterface,/** Show a toast from the web page */@JavascriptInterfacepublic void showToast(String toast) {Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();}}

addJavascriptInterface是Android提供的方法。包括两个參数。第一个是java中实现的类,类提供了javascript訪问方法。第二个參数是java类映射到javascript的对象名。

在web中调用方式:

  <button οnclick="showAndroidToast('addjavascriptinterface');">showAndroidToast</button><script type="text/javascript">function showAndroidToast(toast) {

Android中Java与web通信相关推荐

  1. android 服务端 servlet webservice,Tomcat 上如何部署Servlet及Android中如何与服务器通信(12页)-原创力文档...

    Tomcat 上如何部署Servlet及Android中如何与服务器通信 下载Tomcat并安装 Apache Tomcat powers numerous large-scale, mission- ...

  2. Android中的跨进程通信方法实例及特点分析(二):ContentProvider

    1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据,Android系统给我们提供了Content P ...

  3. 从Android中Activity之间的通信说开来

    引言 最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识. android中有一个 ...

  4. java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...

    之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...

  5. Android笔记(三十一)Android中线程之间的通信(三)子线程给主线程发送消息...

    先看简单示例:点击按钮,2s之后,TextView改变内容. package cn.lixyz.handlertest;import android.app.Activity; import andr ...

  6. Android中Intent/Bundle的通信原理及大小限制(Parcelable原理及与Serializable的区别)

    ​我们知道可以通过Intent和bundle在activity或fragment间进行通信,那么这个通信是如何实现的. 通过intent的bundle的源码可以看到它们都是实现了Parcelable, ...

  7. android java 调用js,Android中Java和JavaScript交互实例

    Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本.本文将介绍如何实现Java代码和Javascript代码的相互调用. 如 ...

  8. 在android中使用USB进行通信的4种方法

    1. 使用skelton.c demo skelton.c 是linux内核自带的读写USB设备的demo,修改 VID&PID,编译成内核模块,成功加载后即可在用户空间使用open read ...

  9. ios 跨域_如何在iOS和Android中建立跨域通信桥

    ios 跨域 I was working on a certain project at work, in which I needed to connect several varying comp ...

  10. java代码中如何嵌入c语言,Android中Java代码与C的互相调用(JNI的简单使用)

    引言 最近在做项目的时候,接触到JNI,想一想自己第一次接触这个东西的时候,还是好久之前,现在既然接触到了,那我就简单的跟大家讲一讲JNI的基本使用方法. JNI(Java Native Interf ...

最新文章

  1. 利润中心, 成本中心, 工作中心
  2. 让企业零成本拥有自己独立的企业网站不再是问题...
  3. android 获取cpu使用率_超详细的zabbix监控windows磁盘IO及cpu使用率教程
  4. python3 生成器
  5. OpenStack基金会任命马振强为中国区大使
  6. 关于美食html网页设计完整版,10个以美食为主题的网页设计案例
  7. 基于Jquery WeUI的微信开发H5页面控件的经验总结(2)
  8. 安卓psp模拟器联机教程_让PSP带你回童年FC模拟器联机教程.doc
  9. python入门汇总
  10. Python生成字符视频
  11. OpenGL的环境光、点光源、聚光灯、方向光、材质的定义。
  12. Java生成二维码图片并打包下载
  13. 亚马逊中东站好做吗?这或许是迄今为止最好的回答!
  14. FPGA自学之路1(半加器和全加器的实现)
  15. QGis 使用高德 画KML
  16. swagger2 description is deprecated
  17. 调用android邮件程序,Android开发中怎样调用系统Email发送邮件(多种调用方式)
  18. layer 上传图片点击取消仍在加载_上传图片到smms图床(整合layer上传插件) by:小灰灰 | 小灰灰博客...
  19. 嗅探器模式和数据包记录模式
  20. 基于PyQt5实现第二界面或弹出界面(子窗口)

热门文章

  1. 8.4 bert的压缩讲解 意境级
  2. numpy教程:逻辑函数Logic functions
  3. Linux:管线命令
  4. BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer
  5. optenstack配置glance
  6. ubuntu中如何查看系统信息(uname)
  7. Android【报错】Description Resource Path Location Type Unparsed aapt error(s)! Cheheck the console for o
  8. 安卓应用性能调试和优化经验分享
  9. Labview学习笔记(一)
  10. 【BZOJ1226】学校食堂(动态规划,状态压缩)