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

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

1、重写WebViewClient

 private class MyWebViewClient extends WebViewClient {
@Override
public 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 page Toast.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 onclick="window.open('www.example.com?

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

2、重写WebChromeClient

 final class MyWebChromeClient extends WebChromeClient {
@Override
public 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;
} @Override
public boolean onJsConfirm(WebView view, String url, String message,
JsResult result) {
// TODO Auto-generated method stub
return super.onJsConfirm(view, url, message, result);
} @Override
public 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 onclick="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 */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}

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

在web中调用方式:

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

<script type="text/javascript">
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. pc端自适应方案

    一.常见处理方式 定宽 电商类.内容为主的网站几乎采用这种方式 1.网易考拉.京东(1190px) 2.知乎(1000px),果壳(1000px),网易新闻(1200px) 媒体查询+定宽 图片类.简 ...

  2. 【bzoj2048】[2009国家集训队]书堆 数论

    题目描述 输入 第一行正整数 N M 输出 一行(有换行符),L,表示水平延伸最远的整数距离 (不大于答案的最大整数) 样例 #1 Input: 1 100 Output: 49 #2 Input: ...

  3. BZOJ-2618 [CQOI2006]凸多边形

    半平面交模版题.. #include <cstdlib> #include <cstdio> #include <cmath> #include <cstri ...

  4. BZOJ3260 跳 【组合数】

    题目 邪教喜欢在各种各样空间内跳.现在,邪教来到了一个二维平面. 在这个平面内,如果邪教当前跳到了(x,y),那么他下一步可以选择跳到以下4个点: (x-1,y),(x+1,y),(x,y-1),(x ...

  5. PE508

    真是日了苟了我之前还以为那个递归会炸状态..我真他妈胆小啊.. = = 明确一下,这个可以构成所有高斯整数(唯一),构造方法大概就是先看曼哈顿距离,然后判断要不要减1,然后再/(1-i) 我们考虑在末 ...

  6. 解决ie8下面placeholder显示问题

    今天测试反馈一个bug,需要在ie8下面看到placeholder提示,开始的想法是对ie8进行降级处理,在ie8下面就不显示了. 现在测试反馈了,解决办法. function isLowIE() { ...

  7. 如何清除全部的NSUserDefaults储存的数据。

    今天做项目遇到,如何清除全部的NSUserDefaults储存的数据. 方法1:找到所有的key然后remove掉 代码: [objc] view plain copy /** * 清除所有的存储本地 ...

  8. O(1)gcd学习笔记

    设最大权值为\(M\) \(T=\sqrt M\) 定理 任意一个\(\le M\)的数一定可以表示为abc三个数的乘积 满足这三个数要么\(\le T\),要么是一个质数 证明: 考虑反证 假设\( ...

  9. mybatis hashmap 输入键值对为空时,key 丢失

    参考文档:https://blog.csdn.net/lulidaitian/article/details/70941769 springMVC+mybatis查询数据,返回resultType=” ...

  10. JS和jquery加载的区别

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...