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

UniApp调用SDK原生接口_第1张图片

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

UniApp调用SDK原生接口_第2张图片

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

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

UniApp调用SDK原生接口_第3张图片

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

UniApp调用SDK原生接口_第4张图片

二,编写代码

UniApp调用SDK原生接口_第5张图片

编写工具类,提供数据

继承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() {
                   }.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() {
                }.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() {
                        }.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包

UniApp调用SDK原生接口_第6张图片

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

UniApp调用SDK原生接口_第7张图片

勾选之后

UniApp调用SDK原生接口_第8张图片

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

UniApp调用SDK原生接口_第9张图片

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

UniApp调用SDK原生接口_第10张图片

四,uinapp引用插件

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

UniApp调用SDK原生接口_第11张图片

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

UniApp调用SDK原生接口_第12张图片

然后在manifest.json引用即可

UniApp调用SDK原生接口_第13张图片

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

你可能感兴趣的:(android,java,vue,javascript,安卓)