zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    移动语义
    unordered_map/unordered_set & unordered_multimap/unordered_multiset非关联容器
    C++构造函数和析构函数,以及构造函数特殊成员变量和函数的初始化
    Valgrind,内存调试工具
    堆排序,图解,C/C++实现
    哈希表概念和实现,C/C++实现
    AVL平衡二叉树实现,图解分析,C++描述,完整可执行代码
    二叉排序树,Binary_Sort_Tree,C++完整实现
    [Codeforces Round #656 (Div. 3)] (E. Directing Edges)拓扑排序
    最短路 2 [HDU
  • 原文地址:https://www.cnblogs.com/sandea/p/5543629.html
Copyright © 2011-2022 走看看