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

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

1、重写WebViewClient

  1. private class MyWebViewClient extends WebViewClient {
  2. @Override
  3. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  4. if (Uri.parse(url).getHost().equals("www.example.com")) {
  5. // This is my web site, so do not override; let my WebView load the page
  6.  
  7. Toast.makeText(WebViewClientActivity.this, url, Toast.LENGTH_SHORT).show();
  8.  
  9. return false;
  10. }
  11.  
  12. return true;
  13. }
  14. }

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

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

在web中调用方式:

  1. <button onclick="window.open('www.example.com?
  2.  
  3. body=loadurl')">showAndroidToast</button>

2、重写WebChromeClient

  1. final class MyWebChromeClient extends WebChromeClient {
  2. @Override
  3. public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
  4. Log.d("MyWebChromeClient", message);
  5.  
  6. Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show();
  7. result.confirm();
  8. return true;
  9. }
  10.  
  11. @Override
  12. public boolean onJsConfirm(WebView view, String url, String message,
  13. JsResult result) {
  14. // TODO Auto-generated method stub
  15. return super.onJsConfirm(view, url, message, result);
  16. }
  17.  
  18. @Override
  19. public boolean onJsPrompt(WebView view, String url, String message,
  20. String defaultValue, JsPromptResult result) {
  21.  
  22. Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show();
  23. // TODO Auto-generated method stub
  24. //return super.onJsPrompt(view, url, message, defaultValue, result);
  25.  
  26. result.confirm();
  27. return true;
  28. }
  29.  
  30. }

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

在web中调用方式:

  1. <button onclick="showAndroidToast('Hello Android!');">showAndroidToast</button>
  2.  
  3. <script type="text/javascript">
  4. function showAndroidToast(toast) {
  5. prompt('js prompt');
  6. }
  7. </script>

3、addJavascriptInterface

  1. mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
  2.  
  3. public class WebAppInterface {
  4. Context mContext;
  5.  
  6. /** Instantiate the interface and set the context */
  7. WebAppInterface(Context c) {
  8. mContext = c;
  9. }
  10.  
  11. //在Android 4.2以上的,google作了修正。通过在Java的远程方法上面声明一个@JavascriptInterface,
  12. /** Show a toast from the web page */
  13. @JavascriptInterface
  14. public void showToast(String toast) {
  15. Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
  16. }
  17. }

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

在web中调用方式:

  1. <button onclick="showAndroidToast('addjavascriptinterface');">showAndroidToast</button>

  2. <script type="text/javascript">

  3. function showAndroidToast(toast) {

Android中Java与web通信的更多相关文章

  1. Android中Java反射技术的使用示例

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

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

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

  3. Android中的跨进程通信方法实例及特点分析(一):AIDL Service

    转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40947481 近期有一个需求就是往程序中增加大数据的採集点,可是由于我们的Andro ...

  4. 从Android中Activity之间的通信说开来[转]

    http://www.cnblogs.com/virusswb/archive/2011/08/02/2124824.html 引言 最近两个星期在研究android的应用开发,学习了android应 ...

  5. Android 中Java和JavaScript交互入门

    如何实现JavaScript 和java 交互 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互 ...

  6. Android中Java和JavaScript交互

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

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

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

  8. Android笔记(三十) Android中线程之间的通信(二)Handler消息传递机制

    什么是Handler 之前说过了,Android不允许主线程(MainThread)外的线程(WorkerThread)去修改UI组件,但是又不能把所有的更新UI的操作都放在主线程中去(会造成ANR) ...

  9. 【Unity】Unity中C#与Android中Java的互相调用遇到的一些问题

    1.有关调用的一些问题: (1).在C#中直接调用java中的代码,无返回值: 在java中: public static void setAge(Context context , int leve ...

随机推荐

  1. hibernate运行常见错误

    错误一: Exception in thread "main" org.hibernate.MappingException: Could not determine type f ...

  2. ZigBee学习二 LED点对点通信

    ZigBee学习二 LED点对点通信 终端上电后,自动连接协调器进行组网,成功后,开始发送LED字符数据.当协调器接收到数据后,终端和协调器的LED1都开始闪烁. 工程搭建和文件添加 步骤这里就省了. ...

  3. Quotes

    A man's gotta do what a man's gotta do.

  4. HDU 4557 非诚勿扰(Treap找后继)

    非诚勿扰 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  5. POJ 2286 The Rotation Game(IDA*)

    The Rotation Game Time Limit: 15000MS   Memory Limit: 150000K Total Submissions: 6396   Accepted: 21 ...

  6. Hadoop体系所有组件默认端口列表

    Why? Hadoop集群组件太多,默认端口无法记住,有事后需要查看,就在这里罗列下这里包含我们使用到的组件:HDFS, YARN, Hbase, Hive, ZooKeeper。 What? 端口 ...

  7. javascript版string.Format

    原文发布时间为:2011-03-28 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  8. Dependency Injection in ASP.NET Web API 2

    What is Dependency Injection? A dependency is any object that another object requires. For example, ...

  9. springboot 邮件

    <!-- 邮件end --><dependency> <groupId>org.springframework.boot</groupId> <a ...

  10. Viewpager禁止滑动

    参考:http://www.jianshu.com/p/d3d766cf73d7 public class NoScrollViewPager extends ViewPager { private ...