3.修改app目录下的build.gradle文件
添加
implementation 'com.github.lzyzsd:jsbridge:1.0.4'
4.修改AndroidManifest.xml文件
网络访问权限,当手机需要访问网络,则需要在配置文件中添加该权限。
<uses-permission android:name="android.permission.INTERNET" />
usesCleartextTraffic
true: 是否使用明文传输,也就是可以使用http
false: android 9.0 默认情况下使用https
android:usesCleartextTraffic="true"
5.修改activity_main.xml文件
文件路径:app/src/main/res/layout/activity_main.xml
添加页面布局以及webview加载组件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/activity_jsbridge_textViewtest"
android:layout_width="match_parent"
android:layout_height="70dp"
android:background="#FFBB86FC"
android:text="app通过JsBridge调用js(点击)"
android:textColor="#FFFFFF"
android:layout_margin="20dp"
android:gravity="center"/>
<com.github.lzyzsd.jsbridge.BridgeWebView
android:id="@+id/activity_jsbridge_bridgewebview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.github.lzyzsd.jsbridge.BridgeWebView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
6.修改MainActivity.java文件
文件路径:app/src/main/java/com.example/MainActivity.java
添加事件
注意:bridgeWebView.loadUrl里面设置h5的项目地址
package com.example.vuejsbridge;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.github.lzyzsd.jsbridge.BridgeHandler;
import com.github.lzyzsd.jsbridge.BridgeWebView;
import com.github.lzyzsd.jsbridge.BridgeWebViewClient;
import com.github.lzyzsd.jsbridge.CallBackFunction;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.net.http.SslError;
public class MainActivity extends AppCompatActivity {
private TextView textViewTest;
private BridgeWebView bridgeWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
textViewTest=findViewById(R.id.activity_jsbridge_textViewtest);
bridgeWebView=findViewById(R.id.activity_jsbridge_bridgewebview);
bridgeWebView.setWebViewClient(new BridgeWebViewClient(bridgeWebView) {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
});
bridgeWebView.getSettings().setBuiltInZoomControls(true);
bridgeWebView.getSettings().setSupportZoom(true);
bridgeWebView.getSettings().setDomStorageEnabled(true);
bridgeWebView.loadUrl("https://xxxxxxxxxxxxx/");
textViewTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bridgeWebView.callHandler("monitorTestData", "h5你好,这是我Android主动发送数据给你,请你接收一下!!!(监听monitorTestData)", new CallBackFunction() {
@Override
public void onCallBack(String data) {
Toast.makeText(MainActivity.this, data, Toast.LENGTH_LONG).show();
}
});
}
});
bridgeWebView.registerHandler("getAppData", new BridgeHandler() {
@Override
public void handler(String data, CallBackFunction function) {
Toast.makeText(MainActivity.this, data, Toast.LENGTH_LONG).show();
function.onCallBack("h5你好,这是你调用我Android的方法,现在我回调给你哟(回调getAppData)");
}
});
}
}
7.运行到真机上
四、结合Vue实现效果
通过JsBridge进行app与webview通信(Vue版)
运行出来的界面
JS 通过 JSBridge 调用 Android
Android 通过 JSBridge 调用 JS