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引用即可

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

    相关文章
    |
    6月前
    |
    开发者 iOS开发
    UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“
    UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“
    234 3
    |
    1月前
    |
    JSON 前端开发 API
    使用微信JS-SDK调用发票接口的完整开发指南
    本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
    78 2
    |
    4月前
    uniapp 打包成 apk(原生APP-云打包)免费
    uniapp 打包成 apk(原生APP-云打包)免费
    274 1
    |
    6月前
    |
    Android开发 UED 开发者
    【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
    【5月更文挑战第15天】UniApp与原生开发各有千秋。UniApp以高效跨平台著称,一套代码覆盖多平台,降低开发成本,适合快速开发简单应用。原生开发则提供优秀性能和用户体验,适合对性能要求高的复杂应用。两者在功能实现和维护上各有优势,开发者需根据项目需求权衡选择。随着技术进步,两者都在不断优化,为移动应用开发带来新机遇。
    337 1
    【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
    |
    5月前
    |
    API 开发工具
    企业微信SDK接口API调用-触发推送企业微信微信好友
    企业微信SDK接口API调用-触发推送企业微信微信好友
    |
    5月前
    |
    开发工具
    抖音sdk接口,抖音上线下线
    抖音sdk接口,抖音上线下线
    |
    5月前
    |
    开发工具
    抖音sdk接口,抖音粉丝或好友收发消息
    抖音sdk接口,抖音粉丝或好友收发消息
    |
    5月前
    |
    开发工具
    抖音sdk接口,关注与取消关注抖音号
    抖音sdk接口,关注与取消关注抖音号
    |
    5月前
    |
    开发工具
    抖音sdk接口,同步抖音推荐的好友
    抖音sdk接口,同步抖音推荐的好友
    |
    5月前
    |
    开发工具
    抖音sdk接口,同步抖音聊天会话列表
    抖音sdk接口,同步抖音聊天会话列表

    热门文章

    最新文章

    下一篇
    无影云桌面