在Android中使用dsbirdge(4) Android壳上接收js调用

说明

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());
    }
}
image.png

之后编辑 MainActivity.java,在其中添加如下代码

        JsToJava jsToJava = new JsToJava();
        //无命名空间的写法
        dWebView.addJavascriptObject(jsToJava, null);
        //有命名空间的写法,test 为命名空间
        dWebView.addJavascriptObject(jsToJava, "test");
image.png

js端调用之后,在调试器的日志栏中,会出现如下日志


image.png

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的内容!");
    }
image.png

其余配置同无需回调js部分
具体效果


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容