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

e6c586fe64eb18db42e8a156e1b0a542.png

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

3cec9395c43ed6735e894a638c0ca03f.png

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

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

74fc71e025c76a9f97e72adf2a275659.png

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

47970694dd6a0972639324124884589a.png

二,编写代码

44d19112f3b279b2932e81118aee3b76.png

编写工具类,提供数据

继承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包

8240a4a775c5262555b8e61fab9b132a.png

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

0457b13b5b738132d975822923baed72.png

勾选之后

545ebfcbefe64a0209f2bd9142c05598.png

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

f3267181fb190d675370e762c7dafec0.png

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

011da8741ee6ba31a326260f179eb519.png

四,uinapp引用插件

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

b01e634f6b15ce16be99404e7be077f6.png

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

36d03e947e63b97ac989a18f365e5b5d.png

然后在manifest.json引用即可

df628b1998521fa2832cedbd4bb5847a.png

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>