Android中Java与JavaScript之间交互(转)

Android代码:

package com.fyfeng.testjavascript;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

	private static final String tag = MainActivity.class.getSimpleName();

	WebView webView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		webView = (WebView) this.findViewById(R.id.webview);
		webView.getSettings().setJavaScriptEnabled(true);//设置可以JavaScript
		webView.loadUrl("http://192.168.1.104:8080/examples/");//加载网页

		webView.addJavascriptInterface(new PayYa(), "pay");//定义一个支付结果,模拟。PayYa为支付接口处理类。

	}

	public void onClickPay() {
		Intent intent = new Intent(this, SecondActivity.class);//模拟打开另外一个支付界面。
		startActivityForResult(intent, 1000);
	}

	public void onPayCallback(String result) {
		Log.d(tag, "result = " + result);
		webView.loadUrl("javascript:payCallback(‘" + result + "‘);");//通知网页支付结果。
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {//支付结果返回

		Log.d(tag, "requestCode = " + requestCode + ", resultCode = " + resultCode);
		switch (requestCode) {
		case 1000: {

			if (Activity.RESULT_OK == resultCode) {
				onPayCallback("hello, 这是支付结果. !");
			}

			break;
		}
		}
	}

	public final class PayYa {

		@android.webkit.JavascriptInterface
		public void pay(String hello) {//支付请求处理函数
			Log.d(tag, "pay = " + hello);

			onClickPay();
		}

		public void show(String args) {//这个函数是为了辅助显示网页中的alert对话框。
			Toast.makeText(getApplicationContext(), args, Toast.LENGTH_SHORT).show();
		}
	}

}

网页部分代码:

<!DOCTYPE HTML><html lang="en"><head>
<meta charset="UTF-8">
<title>Apache Tomcat Examples</title>
<script type="text/javascript">
	function doPay(args){

		javascript:pay.pay(args+(new Date()));//调用Android本地支付接口函数,参数为args+new Date();   pay为在Android原生应用代码中定义的一个支付对象,这个支付对象有个pay(...)方法。

		//javascript:pay.show("hello");   

	}

	function payCallback(args){//Android本地支付处理完毕回调该函数,并把支付结果传递到该函数。
			//alert("pay callback = "+args);

			//打印支付结果。
			javascript:pay.show(args);  ////在Android的WebView中无法显示Alert对话框,只能借助Android原生Toast或者Dialog来显示。
		}
</script>
</head>
<body>
	<button onclick="doPay(‘hello‘)">doPay</button><!-- 点击支付事件。 -->
</body></html>
时间: 2024-10-16 20:43:24

Android中Java与JavaScript之间交互(转)的相关文章

android 中java和javascript交互

android的WebView是一个非常强大的控件,本文主要针对其简单使用和笔者在使用时所遇到的问题做一些总结. 本文参考了该博文:http://blog.csdn.net/zgjxwl/article/details/9627685 一.WebView中Java与javascript交互 1.这是要和js交互的注入接口类: public final class JavascriptInteerface{ @JavascriptInterface public void test(String

Android中Java和JavaScript交互

Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本.本文将介绍如何实现Java代码和Javascript代码的相互调用. 如何实现 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方的代码. 本例代码 为了便于讲解,先贴出全部代码 Java代码 package com.example.j

Android 中Java和JavaScript交互入门

如何实现JavaScript 和java 交互 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方的代码. #直接看示例代码: java代码如下: package com.ccb.javascript; import java.net.URISyntaxException; import android.annotation.SuppressLint; impo

Android中webview和js之间的交互(转)

http://www.cnblogs.com/leizhenzi/archive/2011/06/29/2093636.html 1.android中利用webview调用网页上的js代码. Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示: mWebView.getSettings().setJavaScriptEnabled(true); mWebV

安卓中java和js如何交互

1.安卓中java和js如何交互 在Android上怎样实现JAVA和JS交互呢?Android的webview是基于webkit内核的,webview中集成了js与java互调的接口函数,通过addJavas criptInterface方法,可以将Java的类注册进webkit,给网页上的js进行调用,而且还可以通过loadUrl方法是给webkit传递一个URL,供浏览器来进行解析,实现Java和js交互. 要想运行网页上的js脚本,webview必须设置支持Javas cript. 2.

android中fragment和activity之间相互通信

在用到fragment的时候,老是会遇到一个问题,就是fragment与activity之间的通信.下面就来记录一下activity和fragment之间 通过实现接口来互相通信的方法. 1. activity 向fragment发出通信,就这么写: private OnMainListener mainListener; // 绑定接口 @Override public void onAttachFragment(Fragmentfragment) { try { mainListener =

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

import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * Android中Java反射技术的使用示例 * 在Java中描述字节码文件(xxx.class)的类叫Class * 反射的过程可视为剖析Class的过

Android中WebView的JavaScript代码和本地代码交互的三种方式

一.Android中WebView的漏洞分析 最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视,关于这个漏洞,这里就不多做解释了,可能有的同学早就了解了,本来想写一篇文章详细介绍一下,但是网上的知识太多了,而且都很详细,就没弄了,这里大致简单明了的说几句: 第一.漏洞产生的原因 这个漏洞导致的原因主要是因为Android中WebView中的JS访问本地方法的方式存在缺陷,我们做过交互的都知

Android中Fragment与Activity之间的交互(两种实现方式)

(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的. 我们可以这样理解,宿主Activity中的Fragment之间要实现信息交互,就必须通过宿主Activity,Fragment之间是不可能直接实现信息交互的. Fragment与