关于android和javascript函数的互相调用

原理其实很简单,借助webview加载本地html文本,加载完成之后调用js函数,最后通过设置的addJavascriptInterface设置的回调接口返回js函数内的计算结果,完成android代码的调用(具体实现如下)。


1、html文本准备:将html文本编辑好添加到android工程下assets文件夹内


html文本内容(android_js.html)


<html>
<script type="text/javascript">
    function androidtojavascript(a,b) {
CallBackToAndroid.onResult("I am from javascript end:"+add(a,b));
    }
    function add(a,b){
return a+b;
    }
</script>
</html>


android代码访问路径:file:///android_asset/android_js.html


2、代码

package com.example.androidtojsandbackdemo;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog.Builder;

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		((Button) findViewById(R.id.show))
				.setOnClickListener(new OnClickListener() {
					public void onClick(View v) {
						if (v.getId() == R.id.show) {
							testJS();
						}
					}
				});
	}

	@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
	private void testJS() {
		WebView webView = new WebView(MainActivity.this);
		// 设置WebView属性,能够执行Javascript脚本
		webView.getSettings().setJavaScriptEnabled(true);
		// 添加js回调接口
		webView.addJavascriptInterface(new JsCallBack() {
			//如果应用的android:targetSdkVersion数值为17+)JS只能访问带有 @JavascriptInterface注解的Java函数
			public void onResult(String result) {
				showNoteDialog(result);
			}
		}, "CallBackToAndroid");
		// web加载进度监听
		webView.setWebViewClient(new WebViewClient() {
			public void onPageFinished(WebView view, String url) {
				// 加载完毕之后调用js函数
				Log.e("加载完成....", url);
				view.loadUrl("javascript:androidtojavascript(5,6)");
			};
		});
		// 加载本地html文本(里面包含js代码)
		webView.loadUrl("file:///android_asset/android_js.html");
	}

	public interface JsCallBack {
		//如果应用的android:targetSdkVersion数值为17+)JS只能访问带有 @JavascriptInterface注解的Java函数
		@JavascriptInterface
		public void onResult(String result);
	}

	private void showNoteDialog(String result) {
		Builder builder = new Builder(MainActivity.this);
		builder.setTitle("js代码返回信息").setMessage(result)
				.setPositiveButton("知道了", null).show();

	}

}


到此通过android代码和js代码互调就完成了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值