网站备案的要求是,wordpress页面文字的样式,一年级书签制作图片,有哪些做搞笑视频的网站本篇文章从实战角度出发#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程#xff0c;轻松应对安卓原生插件开发与打包需求#xff01; ***环境问题移步至#xff1a;uniapp—an…本篇文章从实战角度出发将UniApp集成新大陆PDA设备RFID的全过程分为四部曲涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程轻松应对安卓原生插件开发与打包需求 ***环境问题移步至uniapp—android原生插件开发1环境准备 一、将App离线SDK解压并导入Android Studio中
下载地址Android 离线SDK - 正式版 | uni小程序SDK
***强烈建议不要不听劝本人踩了两天坑不然有意想不到的问题等着你解决
下载最新版本Android 离线SDK - 正式版不然会出现不兼容问题。最好用案例中的gradle版本不然会出现不兼容问题。包名能共用一个就共用一个不然难的去找问题。
解压App离线SDK、并将UniPlugin-Hello-AS项目导入Android Studio中 等待编译完成需要较长的时间15分钟左右根据电脑性能、网速决定 二、新建自定义模块uniplugin_rfid
***强烈建议不要不听劝本人踩了两天坑不然有意想不到的问题等着你解决
把模块名定义好。把事先定义好的包名直接拿过来用事先生成的appKey中填写的包名此处用之前定义好的包名当然也可以重新定义新的包名然后再去改appKey中的包名再重新生成appKey即可。
新建模块 定义模块名、定义包名生成模块 中途可能会因为build.gradle编译报错直接将uniplugin_module模块下的build.gradle覆盖刚生成模块下的build.gradle然后点击Try Again或者Sync Now 覆盖AndroidManifest.xml文件并修改配置此处会报错会提示你新建一个java类直接创建然后UniModule类必须继承UniModule必须UniJSMethod注解此时AndroidManifest.xml还会报错按照提示修复即可变成同样的结构。 创建RfidModule类如果上一步已创建则忽略此步骤
注意必须继承UniModule必须UniJSMethod注解 添加测试方法
package com.recognition.uniplugin_rfid;import android.content.Context;
import android.util.Log;import com.alibaba.fastjson.JSONObject;
import com.nlscan.uhf.lib.UHFReader;import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;public class RfidModule extends UniModule {// 使用UniJSMethod注解才能使用js调用UniJSMethod(uiThread false)public void add(JSONObject json, UniJSCallback callback) {final int a json.getInteger(a);final int b json.getInteger(b);callback.invoke(new JSONObject() {{put(code, 0);put(result, a b);}});}private MyUhfManager uhfManager;// 初始化UHF设备UniJSMethod(uiThread false)public void initialize(Context context) {if (context ! null) {uhfManager uhfManager.getInstance(context.getApplicationContext());} else {Log.e(UHFPlugin, Context is null, using application context instead.);uhfManager uhfManager.getInstance(context.getApplicationContext());}}// 连接UHF设备UniJSMethod(uiThread false)public boolean connect() {if (uhfManager ! null) {final CountDownLatch latch new CountDownLatch(1);final boolean[] isConnected {false};uhfManager.powerOn(result - {isConnected[0] result;latch.countDown(); // 回调完成时释放锁});try {// 等待回调完成设定超时以防止无尽等待latch.await(5, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();}return isConnected[0];}return false;}// 断开连接UniJSMethod(uiThread false)public boolean disconnect() {if (uhfManager ! null uhfManager.isPowerOn()) {// 假设调用 stopInventory 后达到断开效果UHFReader.READER_STATE stopInventoryState uhfManager.stopInventory();// 如果有设置功率的方法也可以尝试将功率设为零来模拟断开uhfManager.setReadPower(0, result - {// 此处 result 用于表示功率设为0是否成功});// 检查 stopInventory 的状态是否成功return stopInventoryState UHFReader.READER_STATE.OK_ERR;}return false;}// 启动盘点UniJSMethod(uiThread false)public boolean startInventory() {if (uhfManager ! null) {UHFReader.READER_STATE state uhfManager.startInventory();return state UHFReader.READER_STATE.OK_ERR;}return false;}// 停止盘点UniJSMethod(uiThread false)public boolean stopInventory() {if (uhfManager ! null) {UHFReader.READER_STATE state uhfManager.stopInventory();return state UHFReader.READER_STATE.OK_ERR;}return false;}// 读取标签数据UniJSMethod(uiThread false)public String readTagData(int bank, int address, int blkcnt, String accessPassword) {if (uhfManager ! null) {byte[] data uhfManager.getDataByArea(bank, accessPassword, blkcnt);return data ! null ? UHFReader.bytes_Hexstr(data) : null;}return null;}// 写入标签数据到EPC区UniJSMethod(uiThread false)public boolean writeTagDataToEPC(String data, String accessPassword) {if (uhfManager ! null) {final CountDownLatch latch new CountDownLatch(1);final boolean[] writeSuccess {false};uhfManager.writeDataToEPC(data, accessPassword, (result, state) - {writeSuccess[0] result; // 将回调结果存储到数组中latch.countDown(); // 回调完成时释放锁});try {// 等待回调完成设置超时防止阻塞latch.await(5, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();}return writeSuccess[0]; // 返回写入操作的结果}return false;}// 写入标签数据到用户区UniJSMethod(uiThread false)public boolean writeTagDataToUser(String data, String accessPassword) {if (uhfManager ! null) {final CountDownLatch latch new CountDownLatch(1);final boolean[] writeSuccess {false};uhfManager.writeDataToUser(data, accessPassword, (result, state) - {writeSuccess[0] result; // 将回调结果存储到数组中latch.countDown(); // 回调完成时释放锁});try {// 等待回调完成设置超时防止阻塞latch.await(5, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();}return writeSuccess[0]; // 返回写入操作的结果}return false;}}三、将自定义插件添加到unapp插件中
在app中的build.gradle中添加自定义插件模块 在app中的dcloud_uniplugin.json添加自定义插件暴露的方法 编译通过即可下一步进行真机调试。
快速通道
uniapp—android原生插件开发1环境准备
uniapp—android原生插件开发3Android真机调试