jsbridge-n22使用指南

简介: jsbridge-n22使用指南

1. 在模块级别的build.gradle添加jsbridge-n22依赖



//仅包含WebView中Js与Java交互,插件需按指定格式编写
implementation 'com.ospoon:jsbridge-n22:1.0.13'
//包含WebView中Js与Java交互和基础插件,节省开发
implementation 'com.ospoon:jsbridge-plugins-n22:1.0.13'


2. 创建插件



  1. 新建插件Java类(如:ToastBridgeHandler),并继承自BaseBridgeHandler
  2. 在新建的插件Java类上使用注解@BridgePlugin(name="xxx")标注插件名称
  3. 插件各部分简介


/*插件名称,js调用时会使用到*/
@BridgePlugin(name="toast")
public class ToastBridgeHandler extends BaseBridgeHandler {
    /**
     * 需申请权限列表
     * 权限常量请在`com.yanzhenjie.permission.runtime.Permission`
     * 中查看
     * @return
     */
    @Override
    public String[] authorization() {
        return new String[0];
    }
    /**
     * 是否开启`onActivityResult`回调数据
     * @return
     */
    @Override
    public Boolean registerMaInterface() {
        return false;
    }
    /**
     * 执行业务处理
     * @param data
     */
    @Override
    public void process(String data) {
    }
    /**
     * 接收回调数据
     * @param requestCode
     * @param resultCode
     * @param intent
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    }
}


  1. Application的子类onCreate方法中注册插件
/*
    参数支持同时传入多个
*/
Bridge.INSTANCE.registerHandler(ToastBridgeHandler.class);


3. 一键启动


  1. BridgeWebViewActivity
BridgeWebViewActivity.start(this,"http://192.168.199.163:9999");


  1. X5WebViewActivity
X5WebViewActivity.start(this,"http://192.168.199.163:9999");


4. JS调用Java(js-native-n22对调用进行了封装)


window.WebViewJavascriptBridge.callHandler(
    'toast'                     //桥注册的名称ID
    , { text: '你好啊赛利亚', duration: 0 }        //传递给原生的参数
    , function(responseData) {  //异步回调接口
        console.log('native return->'+responseData);
    }
);


5. 其他


  1. 回调数据到Js

在定义的插件中可以取到callBack对象,用于将数据回调到H5 使用方式:


  1. 成功情况:
callBack.onCallBack(ResultUtil.success(JSONObject));


  1. 失败情况:
callBack.onCallBack(ResultUtil.error("1","取消识别"));
callBack.onCallBack(ResultUtil.error("1",e.getMessage()));


  1. 使用上下文
在定义的插件中可以取到getActivity(), new Intent(getActivity(), CaptureActivity.class);


  1. 启动一个带回调的Activity
在定义的插件中可以取到getActivity(),尝试使用getActivity().startActivityForResult()操作


  1. 申请权限
申请权限已经在BaseBridgeHandler操作,只需要将申请的权限通过authorization()返回即可,注意权限使用了
`com.yanzhenjie.permission:support:2.0.0`,所以权限常量请在`com.yanzhenjie.permission.runtime.Permission`
中查看


6. 特殊配置


  1. 如需使用高德定位插件需配置高德定位apikey到app的AndroidManifest.xml
<meta-data android:name="com.amap.api.v2.apikey" android:value="xxx">
</meta-data>


  1. 部分插件需使用到文件存储,需配置一下信息app/src/main/res/xml/provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- /storage/emulated/0/Download/com.bugly.upgrade.demo/.beta/apk-->
    <external-path name="beta_external_path" path="Download/"/>
    <!--/storage/emulated/0/Android/data/com.bugly.upgrade.demo/files/apk/-->
    <external-path name="beta_external_files_path" path="Android/data/"/>
    <!--对应外部内存卡根目录:Environment.getExternalStorageDirectory()-->
    <external-path name="external-path" path="." />
</paths>


  1. app的AndroidManifest.xml
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>


  1. 如需使用语音听写插件,需在Application中进行初始化Appid操作
//注册科大讯飞语音听写
SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID +"=xxxxx");


  1. 如需进行移动统计需在app模块的AndroidManifest.xml中进行添加
<!-- 科大讯飞移动统计分析 -->
<meta-data
    android:name="IFLYTEK_APPKEY"
    android:value="'xxxxx'" />
<meta-data
    android:name="IFLYTEK_CHANNEL"
    android:value="xxxxx" />


  1. 如需使用pushData插件接收H5端的数据,插件中使用的广播形式,集成模块后定义广播接收器并动态注册接收数据
/**
 * author : zhangxin
 * date : 2020-03-27 14:30
 * description : 用于接收js通过插件push到原生中的数据
 */
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String event = intent.getStringExtra("event");
        String agentName = intent.getStringExtra("agentName");
        String agentCode = intent.getStringExtra("agentCode");
        String orgCode = intent.getStringExtra("orgCode");
        Log.i("BroadcastReceiver", "event::: " + event + "  agentName::: " + agentName + " agentCode::: " + agentCode + " orgCode::: " + orgCode);
    }
}
public class MainActivity extends Activity {
    MyBroadcastReceiver mMyBroadcastReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册广播用于接收Js通过插件Push到原生的数据
        mMyBroadcastReceiver = new MyBroadcastReceiver();
        registerReceiver(mMyBroadcastReceiver, new IntentFilter(Constants.JSBRIDGEN22_JS_PUSH_DATA_ACTION));
    }
    @Override
    protected void onDestroy() {
        unregisterReceiver(mMyBroadcastReceiver);
        super.onDestroy();
    }
}


  1. 如需要使用分享功能请将微信分享的APPKEY配置到app的AndroidManifest.xml参照如下
<!-- 配置微信分享 APPKEY-->
<meta-data
    android:name="JSBRIDGE_N22_WECHAT_SHARE_KEY"
    android:value="wxba50597b5a9c762d" />


注意事项:


  1. 页面提示ERR_CACHE_MISS:请设置网络权限
  2. 页面提示ERR_CLEARTEXT_NOT_PERMITTED:请在AndroidManifest.xmlapplication节点增加android:usesCleartextTraffic="true"
  3. 如发生样式冲突请在app模块中的添加AndroidManifest.xml文件的application节点添加tools:replace="android:theme"
  4. 提交代码提示validate-commit-msg: command not found,请全局安装插件,执行命令:cnpm install validate-commit-msg -g,因内部包含vue项目中配置提交钩子



相关文章
|
10月前
|
自然语言处理 运维 前端开发
OS Copilot-操作系统智能助手-新手小白入门必选~
作为一名安卓开发工程师,我日常专注于前端和移动端开发。然而,在项目推进中偶尔需要部署服务端,这对不熟悉Linux的我来说颇具挑战。每次用命令行工具操作时,常需频繁查阅命令及参数,效率低下。 幸运的是,我发现了阿里云推出的OS Copilot智能助手。它通过自然语言问答功能,让命令行操作变得轻松流畅,帮助我快速定位并解决问题,显著提升了工作效率。安装简单,配置便捷,支持单命令模式和命令行模式,极大简化了Linux操作,成为我得力的开发利器。 总结而言,OS Copilot让我这个Linux小白也能高效处理服务端任务,操作体验焕然一新,是不可多得的智能助手。
|
canal 关系型数据库 中间件
开源数据同步神器——canal
作为使用最广泛的数据库,如何将mysql的数据与中间件的数据进行同步,既能确保数据的一致性、及时性,也能做到代码无侵入的方式呢?如果有这样的一个需求,数据修改后,需要及时的将mysql中的数据更新到elasticsearch,我们会怎么进行实现呢?
18118 1
|
5月前
|
索引
鸿蒙开发:自定义切换动画实现Swiper层叠滑动效果
customContentTransition不仅仅可以实现平移上的改变,很多的效果,我们都可以实现,比如放大缩小,旋转等等。
257 2
鸿蒙开发:自定义切换动画实现Swiper层叠滑动效果
|
5月前
|
JSON 生物认证 API
harmony-utils之PermissionUtil,授权相关工具类
harmony-utils之PermissionUtil是HarmonyOS授权工具类,提供申请、校验及二次授权等方法,支持单个或多个权限操作,简化鸿蒙应用权限管理流程。
167 0
|
4月前
|
人工智能 NoSQL Java
LangChain4j 项目概览
LangChain4j 是一个专为 Java 开发者设计的大语言模型 (LLM) 集成框架,旨在简化 Java 应用程序与各种 LLM 提供商的集成过程。该项目受到 Python 的 LangChain、Haystack、LlamaIndex 等框架的启发,为 Java 生态系统提供了强大而统一的 LLM 工具链。
|
10月前
|
Oracle Ubuntu 关系型数据库
linux发行版对比
国内部分常用开源操作系统简要对比
425 5
|
10月前
|
机器学习/深度学习 人工智能 运维
CodeFuse团队2024年10篇论文总结
CodeFuse 是蚂蚁集团开发的多语言代码大型语言模型(LLM),基于海量高质量代码数据和多任务微调技术,已在内部研发人员的编码、测试、运维等场景中广泛应用。2024年,CodeFuse 在国际顶会如ICSE、ICDE、KDD等发表多篇论文,涵盖CodeLLM、机器学习、AI等领域,并开源多个自研大模型,总下载量近200万。项目持续迭代,欢迎贡献和建议。
414 11
|
9月前
|
人工智能 数据可视化 程序员
100 名 AI 程序员体验官都在用通义灵码干什么?
通义灵码联合阿里云开发者社区,全网寻找 100 位 AI 程序员体验官,感受 AI 程序员和满血版 Deepseek 加持下的智能编码新功能,体验需求开发、跨语言编程、单元测试自动生成、图生代码等能力,领取 Cherry 机械键盘、智能手环等奖品。我们看看体验官们用通义灵码都干了什么?
|
数据采集 人工智能 搜索推荐
|
设计模式 开发框架 Java
分清 PO、VO、DAO、BO、DTO、POJO 含义
分清 PO、VO、DAO、BO、DTO、POJO 含义
982 1