• 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调用

    1. /**
    2. * ========================
    3.  * 描述:提供uinapp调用方法
    4.  * @Data : 2022/9/8
    5. * @auther: qiuxianfu
    6. * ========================
    7. **/
    8. public class RFIDModule extends UniModule {
    9. private static final String TAG = "RFIDModule";
    10. /**
    11. * 获取单个标签
    12. * @param callback
    13. * @throws JSONException
    14. */
    15. @UniJSMethod(uiThread = false)
    16. public void getSingleRFID(UniJSCallback callback) {
    17. if(callback != null) {
    18. String rfid = "";
    19. JSONObject data = new JSONObject();
    20. try {
    21. RFIDInfo rfidInfo = RfidManage.getInstance().readRFID();
    22.                if (rfidInfo!= null) {
    23. Gson gson = new Gson();
    24. String json = gson.toJson(rfidInfo,new TypeToken() {
    25. }.getType());
    26. data.put("code", "200");
    27. data.put("data", json);
    28. callback.invokeAndKeepAlive(data);
    29. callback.invoke(data);
    30. }
    31. }catch (Exception e){
    32. try {
    33. data.put("code", "400");
    34. data.put("msg","异常"+e.getMessage());
    35. callback.invokeAndKeepAlive(data);
    36. } catch (JSONException ex) {
    37. ex.printStackTrace();
    38. }
    39. }
    40. }else {
    41. Log.i(TAG,"未传回调函数");
    42. }
    43. }
    44. @UniJSMethod(uiThread = false)
    45.     public JSONObject getSingleRFID() {
    46. String rfid = "";
    47.         JSONObject data = new JSONObject();        try {
    48. RFIDInfo rfidInfo = RfidManage.getInstance().readRFID();
    49.             if (rfidInfo != null) {
    50. Gson gson = new Gson();
    51. String json = gson.toJson(rfidInfo, new TypeToken() {
    52. }.getType());
    53. data.put("code", "200");
    54.                 data.put("data", json);
    55. }
    56. } catch (Exception e) {
    57. e.printStackTrace();
    58. );
    59. }
    60. return data;
    61. }
    62. @UniJSMethod(uiThread = false)
    63. public void asyncGetMultipleRfid(UniJSCallback callback) {
    64. if(callback != null) {
    65. String rfid = "";
    66. JSONObject data = new JSONObject();
    67. try {
    68. RfidManage until = RfidManage.getInstance();
    69. until.startReadRFID(new RFIDUtilListener() {
    70. @Override
    71. public void callBackResult(RFIDInfo rfidInfo) {
    72. // isCounting = false;
    73. Gson gson = new Gson();
    74. String json = gson.toJson(rfidInfo,new TypeToken() {
    75. }.getType());
    76. try {
    77. data.put("code", "200");
    78. data.put("msg","获取数据成功");
    79. data.put("data",json);
    80. callback.invokeAndKeepAlive(data);
    81. } catch (JSONException e) {
    82. e.printStackTrace();
    83. }
    84. }
    85. });
    86. }catch (Exception e){
    87. try {
    88. data.put("code", "400");
    89. data.put("msg","异常"+e.getMessage());
    90. callback.invokeAndKeepAlive(data);
    91. } catch (JSONException ex) {
    92. ex.printStackTrace();
    93. }
    94. }
    95. }else {
    96. Log.i(TAG,"未传回调函数");
    97. }
    98. }
    99. /**
    100. * 获取当前功率
    101. * @return
    102. * @throws JSONException
    103. */
    104. @UniJSMethod(uiThread = false)
    105. public JSONObject getPower(UniJSCallback callback) {
    106. int res = RfidManage.getInstance().getPower();
    107. JSONObject data = new JSONObject();
    108. try {
    109. data.put("code", "200");
    110. data.put("data", res);
    111. callback.invokeAndKeepAlive(data);
    112. }catch (Exception e){
    113. e.printStackTrace();
    114. }
    115. return data;
    116. }
    117. /**
    118. * 获取当前功率
    119. * @return
    120. * @throws JSONException
    121. */
    122. @UniJSMethod(uiThread = true)
    123. public boolean setPower(int power) {
    124. boolean res = RfidManage.getInstance().setPower(power);
    125. return res;
    126. }
    127. /**
    128. * 自动设置功率
    129. * @return
    130. * @throws JSONException
    131. */
    132. @UniJSMethod(uiThread = true)
    133. public int setPowerAutomatic() {
    134. int res = RfidManage.getInstance().setAutoPower();
    135. return res;
    136. }
    137. }

    三,打包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

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

  • 相关阅读:
    前端的页面结构
    static总结
    Vivado仿真数据出错
    022-第三代软件开发-QCustomPlot核心迁移
    java计算机毕业设计学生社团管理与评价系统源码+系统+lw+数据库+调试运行
    leetcode:22. 括号生成
    企业怎么选择广告片的投放途径
    强!10.6K star,一款开源HTTP测试工具,适合新手,简单、容易上手!
    Codeforces Round #898 (Div. 4)
    Milvus 2.4 向量库安装部署
  • 原文地址:https://blog.csdn.net/qxf865618770/article/details/126775120