有uniapp开发网友问我,因为公司业务需要调用原生SDK才能实现的功能,因为没有去了解Android原生的这方面知识,接下来带大家一起了解一下uniapp调用;
一,准备工作
- 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引用即可
制作自定义基座,选择自定义基座运行即可;