UniApp调用SDK原生接口

简介: UniApp调用SDK原生接口

有uniapp开发网友问我,因为公司业务需要调用原生SDK才能实现的功能,因为没有去了解Android原生的这方面知识,接下来带大家一起了解一下uniapp调用;

一,准备工作

  1. uniapp调用插件开发文档:https://nativesupport.dcloud.net.cn/NativePlugin/README
    先了解uniapp调用插件的大概意思,不然会碰到很多问题

2.下载App离线SDK及demo导入

https://nativesupport.dcloud.net.cn/AppDocs/download/android

UniPlugin-Hello-AS导入到Android Studio 中;

这个主要是用到了一个获取识别RFID的功能,插件准备做的功能是将手持设备实现一个多标签回调给UniApp;

3,新建一个Android 依赖包 命名uhfg

4.在build.gradle文件需要引用一下uinapp库


二,编写代码

编写工具类,提供数据

继承UniModule,提供uinapp调用

    /**
     * ========================
     * 描述:提供uinapp调用方法
     * @Data : 2022/9/8
     * @auther: qiuxianfu
     * ========================
     **/
    public class RFIDModule extends UniModule {
        private static final String TAG = "RFIDModule";
        /**
         * 获取单个标签
         * @param callback
         * @throws JSONException
         */
        @UniJSMethod(uiThread = false)
        public void getSingleRFID(UniJSCallback callback)  {
            if(callback != null) {
                String rfid = "";
                JSONObject data = new JSONObject();
                try {
                   RFIDInfo rfidInfo = RfidManage.getInstance().readRFID();
                   if (rfidInfo!= null) {
                       Gson gson = new Gson();
                       String json = gson.toJson(rfidInfo,new TypeToken<RFIDInfo>() {
                       }.getType());
                       data.put("code", "200");
                       data.put("data", json);
                       callback.invokeAndKeepAlive(data);
                       callback.invoke(data);
                   }
                }catch (Exception e){
                    try {
                        data.put("code", "400");
                        data.put("msg","异常"+e.getMessage());
                        callback.invokeAndKeepAlive(data);
                    } catch (JSONException ex) {
                        ex.printStackTrace();
                    }
                }
            }else {
                Log.i(TAG,"未传回调函数");
            }
        }
        @UniJSMethod(uiThread = false)
        public JSONObject getSingleRFID() {
            String rfid = "";
            JSONObject data = new JSONObject();        try {
                RFIDInfo rfidInfo = RfidManage.getInstance().readRFID();
                if (rfidInfo != null) {
                    Gson gson = new Gson();
                    String json = gson.toJson(rfidInfo, new TypeToken<RFIDInfo>() {
                    }.getType());
                    data.put("code", "200");
                    data.put("data", json);
                }
            } catch (Exception e) {
                e.printStackTrace();
    );
            }
        return data;
        }
        @UniJSMethod(uiThread = false)
        public void asyncGetMultipleRfid(UniJSCallback callback) {
            if(callback != null) {
                String rfid = "";
                JSONObject data = new JSONObject();
                try {
                    RfidManage until = RfidManage.getInstance();
                    until.startReadRFID(new RFIDUtilListener() {
                        @Override
                        public void callBackResult(RFIDInfo rfidInfo) {
    //                        isCounting = false;
                            Gson gson = new Gson();
                            String json = gson.toJson(rfidInfo,new TypeToken<RFIDInfo>() {
                            }.getType());
                            try {
                                data.put("code", "200");
                                data.put("msg","获取数据成功");
                                data.put("data",json);
                                callback.invokeAndKeepAlive(data);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                }catch (Exception e){
                    try {
                        data.put("code", "400");
                        data.put("msg","异常"+e.getMessage());
                        callback.invokeAndKeepAlive(data);
                    } catch (JSONException ex) {
                        ex.printStackTrace();
                    }
                }
            }else {
                Log.i(TAG,"未传回调函数");
            }
        }
        /**
         * 获取当前功率
         * @return
         * @throws JSONException
         */
        @UniJSMethod(uiThread = false)
        public JSONObject getPower(UniJSCallback callback) {
            int res = RfidManage.getInstance().getPower();
            JSONObject data = new JSONObject();
            try {
                data.put("code", "200");
                data.put("data", res);
                callback.invokeAndKeepAlive(data);
            }catch (Exception e){
                e.printStackTrace();
            }
            return data;
        }
        /**
         * 获取当前功率
         * @return
         * @throws JSONException
         */
        @UniJSMethod(uiThread = true)
        public boolean setPower(int power)  {
            boolean res = RfidManage.getInstance().setPower(power);
            return res;
        }
        /**
         * 自动设置功率
         * @return
         * @throws JSONException
         */
        @UniJSMethod(uiThread = true)
        public int setPowerAutomatic() {
            int res = RfidManage.getInstance().setAutoPower();
            return res;
        }
    }

    三,打包aar包

    如果Android studio 中 gradle task显示不全,则需要在setting

    勾选之后

    再点files 同步一下gradle文件即可

    点击其中一个就可以构建aar

    四,uinapp引用插件

    在项目下创建目录 nativeplugins 将插件包放在该目录下,插件结构如下。

    特别提醒:名字需要一直,否则一直失败

    然后在manifest.json引用即可

    制作自定义基座,选择自定义基座运行即可;

    相关文章
    |
    5月前
    |
    JSON 小程序 开发工具
    uniapp获取接口数据,渲染在picker选择器里面
    uniapp获取接口数据,渲染在picker选择器里面
    76 0
    |
    1月前
    |
    开发者 iOS开发
    UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“
    UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“
    50 3
    |
    6月前
    |
    开发工具 Android开发
    uniapp调用芯烨xprinter打印机安卓sdk
    uniapp调用芯烨xprinter打印机安卓sdk
    115 0
    |
    6月前
    |
    缓存 小程序 前端开发
    【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
    【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
    203 0
    |
    1月前
    |
    开发框架 Java .NET
    闪速码短信Python接口SDK
    闪速码短信Python接口SDK
    66 4
    |
    6月前
    |
    安全 API 开发工具
    获取仓库列表接口可以通过SDK或者REST API两种方式调用
    获取仓库列表接口可以通过SDK或者REST API两种方式调用
    50 2
    |
    2月前
    |
    Web App开发 前端开发 JavaScript
    如何快速与呼叫中心系统CTI/API/SDK接口集成
    由于呼叫中心系统涉及通信、CTI、终端设备、中继线路等技术与概念,从事信息管理系统、ERP、CRM、工单系统等的研发人员一般不是非常熟悉这部分技术,当需要提供具备呼叫中心能力的解决方案时,往往要用较多的时间来研究这些相对复杂的技术,对接过程比较长,开发调试有一定的阻力,基于此,我们提出一种更加简便高效的集成方法,可以零代码集成呼叫中心平台,实现项目快速上线。
    如何快速与呼叫中心系统CTI/API/SDK接口集成
    |
    3月前
    |
    移动开发 前端开发 JavaScript
    原生求生记:揭秘UniApp的原生能力限制
    原生求生记:揭秘UniApp的原生能力限制
    |
    3月前
    |
    前端开发
    uniapp如何封装接口
    uniapp如何封装接口
    40 0
    |
    3月前
    |
    JSON Java 数据库
    基于uniapp原生组件uni-ui 做一个登录注册与个人中心(后端篇)
    基于uniapp原生组件uni-ui 做一个登录注册与个人中心(后端篇)
    112 2

    热门文章

    最新文章