如何在Android平台上使用JS直接调用Java方法
1个回答
展开全部
Android平台上使用js调用java方法,主要是通过webview控件提供的 webview.addJavascriptInterface(new Person(this), "per"); 这个方法将java对象注入到js中,然后可以在js中通过调用该java对象的方法来实现回调,如下代码:
1.html文件,demo.html
<html>
<head>
<script type="text/javascript" >
function updateHtml(type,type2){
document.getElementById("content").innerHTML =
"弹出对话框,测试"+type+type2;
alert("dialog");
}
</script>
</head>
<body>
这是一个js与android的例子 <a onClick="window.ceshi.startFunction()" href="">弹出对话框</a>
调用对象方法 <a onClick="per.print()" href="">调用对象方法</a>
<span id="content"></span>
</body>
</html>
2.android端控制代码:
package com.ccb.javascript;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
int priceMenu1 = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取webView 控件
final WebView webview = (WebView) findViewById(R.id.webview);
// 加上这句话才能使用javascript方法
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///android_asset/demo.html");
webview.addJavascriptInterface(new Person(this), "per");
Button button = (Button) findViewById(R.id.button); // 获取button控件
// 即"调用html中的js方法"
// 按钮
// 给button添加事件响应,执行JavaScript的fillContent()方法
button.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
webview.loadUrl("javascript:updateHtml('str11','bar22')");//多个参数拼接
}
});
Button button1 = (Button) findViewById(R.id.button1);// 获取button1控件
// 即"重新加载html "按钮
// 给button添加事件响应,执行JavaScript的fillContent()方法
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MainActivity", "button1 OnClick");
webview.loadUrl("file:///android_asset/demo.html");
// return
}
});
// 增加接口方法,让html页面调用
webview.addJavascriptInterface(this, "ceshi");
Button buttonceshi = (Button) findViewById(R.id.buttonceshi);
buttonceshi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
public void startFunction() {
AlertDialog.Builder ab = new AlertDialog.Builder(MainActivity.this);
ab.setTitle("提示");
ab.setMessage("通过js 调用了 java 中的方法");
ab.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ab.create().show();
}
class Person {
Context mContext;
Person(Context c) {
mContext = c;
}
String name = "我的名字是对象";
int age;
public String getName() {//js里面无法直接使用对象加属性的方式访问,暂时没找到方法,只能用对象加getName
<span style="white-space:pre"> </span>return name;
<span style="white-space:pre"> </span>}
public void print() {
Toast.makeText(mContext, "你好", Toast.LENGTH_LONG).show();
System.out.println("我成功的调用了对象");
}
}
}
运行结果如下:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询