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

Posted sandea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

以上是关于Android中Java与JavaScript之间交互(转)的主要内容,如果未能解决你的问题,请参考以下文章

Android Java和Phonegap Javascript之间的通信?

Android与JavaScript之间的相互调用

Android与JavaScript之间的相互调用

iOS中Objective-C与JavaScript之间相互调用的实现(实现了与Android相同的机制)

在 Java 与 Javascript 之间计算距离

React-Native系列Android——Native与Javascript通信原理