原生安卓和js的交互
WebView的基本使用
基本配置
1.在xml里创建如下代码
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.在AndroidManifest.xml里加入如下权限(用于网络访问)
<uses-permission android:name="android.permission.INTERNET"/>
3.Java代码初始化创建webview
private WebView webView;
//开启谷歌调试,具体使用方法可查阅:https://www.cnblogs.com/wmhuang/p/7396150.html
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
webView = findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setJavaScriptEnabled(true); //开启js
//设置WebView是否使用其内置的变焦机制,该机制结合屏幕缩放控件使用,默认是false,不使用内置变焦机制
webSettings.setAllowContentAccess(true);
webSettings.setDomStorageEnabled(true);
// 设置允许JS弹窗
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(new WebViewClient());
原生安卓调用js
原生安卓代码
webView.post(new Runnable() {
@Override
public void run() {
// 注意调用的JS方法名要对应上
// 调用javascript的test()方法
callEvaluateJavascript(webView,username);
}
});
//加载本地资源文件 html
webView.loadUrl("file:///android_asset/index.html");
private void callEvaluateJavascript(WebView webView, String username) {
System.out.println("username============"+username);
webView.evaluateJavascript("test('" + username + "')", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Toast.makeText(DeviceActivity.this, "onReceiveValue value=" + value, Toast.LENGTH_LONG).show();
}});
}
js代码
创建index.html文件,路径如下:
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title>test</title>
<script type="text/javascript">
function test(name){
return name;
}
</Script>
</head>
<body style="background-color: #F2F2F2;">
</body>