前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jsbridge-n22使用指南

jsbridge-n22使用指南

作者头像
前端小鑫同学
发布2022-12-24 10:46:26
3060
发布2022-12-24 10:46:26
举报

jsbridge-n22使用指南

演示APK下载地址

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

如无法更新全依赖包,请配置maven地址:https://dl.bintray.com/spoon2014/maven

代码语言:javascript
复制
//仅包含WebView中Js与Java交互,插件需按指定格式编写
implementation 'com.ospoon:jsbridge-n22:1.0.13'

//包含WebView中Js与Java交互和基础插件,节省开发
implementation 'com.ospoon:jsbridge-plugins-n22:1.0.13'
2. 创建插件

新建插件Java类(如:ToastBridgeHandler),并继承自BaseBridgeHandler

在新建的插件Java类上使用注解@BridgePlugin(name="xxx")标注插件名称

插件各部分简介

代码语言:javascript
复制
/*插件名称,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) {

    }
}

Application的子类onCreate方法中注册插件

代码语言:javascript
复制
/*
    参数支持同时传入多个
*/
Bridge.INSTANCE.registerHandler(ToastBridgeHandler.class);
3. 一键启动

BridgeWebViewActivity

代码语言:javascript
复制
BridgeWebViewActivity.start(this,"http://192.168.199.163:9999");

X5WebViewActivity

代码语言:javascript
复制
X5WebViewActivity.start(this,"http://192.168.199.163:9999");
4. JS调用Java(js-native-n22对调用进行了封装)
代码语言:javascript
复制
window.WebViewJavascriptBridge.callHandler(
    'toast'                     //桥注册的名称ID
    , { text: '你好啊赛利亚', duration: 0 }        //传递给原生的参数
    , function(responseData) {  //异步回调接口
        console.log('native return->'+responseData);
    }
);
5. 其他
  1. 回调数据到Js

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

成功情况:

代码语言:javascript
复制
callBack.onCallBack(ResultUtil.success(JSONObject));

失败情况:

代码语言:javascript
复制
callBack.onCallBack(ResultUtil.error("1","取消识别"));
callBack.onCallBack(ResultUtil.error("1",e.getMessage()));

使用上下文

代码语言:javascript
复制
在定义的插件中可以取到getActivity(), new Intent(getActivity(), CaptureActivity.class);

启动一个带回调的Activity

代码语言:javascript
复制
在定义的插件中可以取到getActivity(),尝试使用getActivity().startActivityForResult()操作

申请权限

代码语言:javascript
复制
申请权限已经在BaseBridgeHandler操作,只需要将申请的权限通过authorization()返回即可,注意权限使用了
`com.yanzhenjie.permission:support:2.0.0`,所以权限常量请在`com.yanzhenjie.permission.runtime.Permission`
中查看
6. 特殊配置

如需使用高德定位插件需配置高德定位apikey到app的AndroidManifest.xml

代码语言:javascript
复制
<meta-data android:name="com.amap.api.v2.apikey" android:value="xxx">
</meta-data>

部分插件需使用到文件存储,需配置一下信息 app/src/main/res/xml/provider_paths.xml

代码语言:javascript
复制
<?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>

app的AndroidManifest.xml

代码语言:javascript
复制
<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>

如需使用语音听写插件,需在Application中进行初始化Appid操作

代码语言:javascript
复制
//注册科大讯飞语音听写
SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID +"=xxxxx");

如需进行移动统计需在app模块的AndroidManifest.xml中进行添加

代码语言:javascript
复制
<!-- 科大讯飞移动统计分析 -->
<meta-data
    android:name="IFLYTEK_APPKEY"
    android:value="'xxxxx'" />
<meta-data
    android:name="IFLYTEK_CHANNEL"
    android:value="xxxxx" />

如需使用pushData插件接收H5端的数据,插件中使用的广播形式,集成模块后定义广播接收器并动态注册接收数据

代码语言:javascript
复制
/**
 * 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);
    }
}
代码语言:javascript
复制
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();
    }
}

如需要使用分享功能请将微信分享的APPKEY配置到app的AndroidManifest.xml参照如下

代码语言:javascript
复制
<!-- 配置微信分享 APPKEY-->
<meta-data
    android:name="JSBRIDGE_N22_WECHAT_SHARE_KEY"
    android:value="wxba50597b5a9c762d" />

注意事项:

  1. 页面提示ERR_CACHE_MISS:请设置网络权限<uses-permission android:name="android.permission.INTERNET"/>
  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项目中配置提交钩子

使用方案为JSBridge-Android

发布地址bintray

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • jsbridge-n22使用指南
    • 1. 在模块级别的build.gradle添加jsbridge-n22依赖
      • 2. 创建插件
        • 3. 一键启动
          • 4. JS调用Java(js-native-n22对调用进行了封装)
            • 5. 其他
              • 6. 特殊配置
              相关产品与服务
              文件存储
              文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档