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

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

勾选之后

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

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

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

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

然后在manifest.json引用即可

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