UniApp调用SDK原生接口

Posted 码农乐园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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引用即可

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

以上是关于UniApp调用SDK原生接口的主要内容,如果未能解决你的问题,请参考以下文章

UniApp调用SDK原生接口

uniapp原生插件开发-android端-component扩展

uniapp原生插件开发(iOS)

uniapp调用拨打电话怎么获得用户是不是授权

easyexcel无法在uniapp调用

uniapp原生插件开发问题汇总