说明
dsbridge-android 的github的地址: https://github.com/wendux/DSBridge-Android
本项目android的源码:https://gitee.com/BenjaminSong/dsbridge-demo-android
编辑工具: Android Studio
vue端:https://www.jianshu.com/p/40716a69194d
此文章需结合《在Vue中使用dsbirdge(2)js调用 Android壳上方法》
1. 简述
该功能将就类似于在Android壳上启动一个后台服务,每个方法就好比提供的接口,js中调用这种方法就类似于调用API请求后台这种概念。此demo中将该项功能提供的调用接口放置于一个专门的文件之中,便于管理。
2. 实现代码,无需回调js
新建一个java文件,JsToJava.java(名字很明显,这个文件就是从js调用java的)。
里面新建一个demo方法,用于js调用打印日志使用。
强调:
1.此处必须注意,在无需回调的js的前提下showJSLog中只能有一个参数!
2.建议使用Object类型接收参数,以防类型报错!
public class JsToJava {
@JavascriptInterface
public void showJSLog(Object msg) {
Log.d("JsApi", msg.toString());
}
}
之后编辑 MainActivity.java,在其中添加如下代码
JsToJava jsToJava = new JsToJava();
//无命名空间的写法
dWebView.addJavascriptObject(jsToJava, null);
//有命名空间的写法,test 为命名空间
dWebView.addJavascriptObject(jsToJava, "test");
js端调用之后,在调试器的日志栏中,会出现如下日志
1.如果引用多个文件,通过addJavascriptObject中的第二个参数(参数名称为namespace)进行区分。
2.如果setWebContentsDebuggingEnabled设置为true,js端调用不存在的方式,可能会导致APP闪退。
3. 实现代码,js调用后需回调
JsToJava中添加
@JavascriptInterface
public void jsCallBack(Object msg, final CompletionHandler<String> handler) {
Log.d("JsApi", msg.toString());
handler.complete("这个是js调用Android端后回调js的内容!");
}
其余配置同无需回调js部分
具体效果