JS调用Android方法示例
前言
目前很多App里都内置了Web网页(Hybrid App),这就涉及到Android客户端与Web网页交互的实现,接下来通过示例说明JS如何调用Android方法。
示例代码
AndroidManifest.xml
AndroidManifest.xml需要加入INTERNET权限:
<uses-permission android:name="android.permission.INTERNET" />
AndroidtoJs.java
定义一个与JS对象映射关系的Android类:AndroidtoJs,AndroidtoJs中被JS调用的方法必须加入@JavascriptInterface注解:
package com.example.testjs2;
import android.webkit.JavascriptInterface;
public class AndroidtoJs {
private String status = "off";
//打印信息方法
@JavascriptInterface
public void print(String msg) {
System.out.println(msg);
}
//获取状态值方法
@JavascriptInterface
public String getStatus() {
return status;
}
//修改状态值方法
@JavascriptInterface
public void setStatus(String status) {
this.status = status;
}
}
activity_main.xml
在activity_main.xml添加一个WebView即可,这里将id设为webView1。
MainActivity.java
在MainActivity.java为webView设置与JS交互的权限,并通过将addJavascriptInterface()将Java对象映射到JS对象,最后加载javascript.html(在下一步创建):
package com.example.testjs2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView1);
WebSettings webSettings = webView.getSettings();
// 设置与Js交互的权限
webSettings.setJavaScriptEnabled(true);
// 通过addJavascriptInterface()将Java对象映射到JS对象
//参数1:Javascript对象名
//参数2:Java对象名
webView.addJavascriptInterface(new AndroidtoJs(), "test");//AndroidtoJS类对象映射到js的test对象
webView.loadUrl("file:///android_asset/javascript.html");
}
}
javascript.html
创建assets目录,并在assets目录下添加JS文件,这里命名为javascript.html,在javascript.html里通过test对象调用Android方法:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Carson</title>
<script>
function turnOn() {
test.setStatus("On");
}
function turnOff() {
test.setStatus("Off");
}
function getStatus(){
let status = "";
status = test.getStatus();
test.print("Status:"+status);
}
</script>
</head>
<body>
<br /><br /><br /><br /><br /><br />
<button onClick="turnOn()">打开</button>
<br /><br /><br /><br /><br /><br />
<button onClick="turnOff()">关闭</button>
<br /><br /><br /><br /><br /><br />
<button onClick="getStatus()">点击查看状态</button>
</body>
</html>
测试
在真机或模拟器上运行app,反复点击三个按钮,查看logcat的打印是否正确: