UniApp调用SDK原生接口
有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引用即可
制作自定义基座,选择自定义基座运行即可;