JS如何调用Android原生方法

一、引入 JSBridge

JSBridge 主要是给 JavaScript 提供调用 Native 功能的接口,让混合开发中的前端部分可以方便地使用 Native 的功能(例如:通讯录、蓝牙)。
而且 JSBridge 的功能不止调用 Native 功能这么简单宽泛。实际上,JSBridge 就像其名称中的Bridge的意义一样,是 Native 和非 Native 之间的桥梁,它的核心是构建 Native 和非 Native 间消息通信的通道,而且这个通信的通道是双向的。

二、JS调用Android原生方法

1、增加Javascript的接口:把安卓的相关方法的接口赋值到一个特殊的js对象中,继而赋值给window对象中,比如下面代码块 项目中的PosObj
在这里插入图片描述

private void initJs() {
    
    //增加Javascript的接口
        webView.addJavascriptInterface(new MyJSI(this), "PosObj");
    }

2、创建共js调用的方法 一定要加@JavascriptInterface注解
在这里插入图片描述

@JavascriptInterface
    public String invokeFun(String funName, String json) {
    
    
}
//通用
@JavascriptInterface 
    public void close() {
    
    
 //js调用完以后的逻辑 
 
 }

3、示例:封装获取版本号的方法
在这里插入图片描述

public String getVersionName(Context context) {
    
    
        PackageManager packageManager = context.getPackageManager();
        // getPackageName()是你当前类的包名,0代表是获取版本信息
        PackageInfo packInfo = null;
        String version = "";
        try {
    
    
            packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            version = packInfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
    
    
            e.printStackTrace();
        }
        return version;
    }

4、js调用Android方法()//将handleAndroid方法放到需要调用的地方
在这里插入图片描述

    function handleAndroid(){
    
    
            // 由于对象映射,所以调用PosObj对象等于调用Android映射的对象
            //getVersionName是Android的方法
            window.PosObj.invokeFun('getVersionName', '')
        }

猜你喜欢

转载自blog.csdn.net/wangbaobao512/article/details/127219629