更新记录
1.02(2022-05-20)
解决采用回调模式时返回的信息不是字节流的问题。
1.00(2021-09-07)
修改之前的Bug.
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 10.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
UniApp-UsbHid 安卓原生插件使用说明
插件功能:
提供UniApp调用UsbHid设备的操作。
接口列表:
-
打开设备
//vid 设备VID
//pid 设备PID
//jsCallback JS回调地址(打开设备的结果用此回调来返回)
OpenDevice(int vid, int pid, JSCallback jsCallback)
回调数据:
{
"return":0,//0 成功;1 失败
"msg":"打开成功"
}
-
关闭设备
CloseDevice()
-
发送数据(要返回)
//data 发送给设备的数据
//jsCallback Js回调地址,可不传。当传入此参数时,发送给设备数据后会进行一次读取命令,如果读到数据用此回调来返回数据;当不传入此参数时不做此操作。
SendData(byte[] data, JSCallback jsCallback)
{
"return":0,//0 成功;1 失败
"msg":"打开成功",
"recvData":[0,0,0]//收到的数据
}
-
发送数据(不要返回)
SendData(byte[] data, null)
-
设置回调地址
//usbEvent USB设备插入或拔出时的事件通知
//recvEvent 收到设备数据后的事件通知,如果调用发送数据且不用回调时请先设置此回调地址,否则设备返回的数据将接收不到。
setUsbEvent(JSCallback usbEvent,JSCallback recvEvent)
-
获取当前已插入的USB设备列表
//jsCallback 回调地址,获取的列表由此回去调来返回。
getHidDeviceList(JSCallback jsCallback)
{
"vid":vid,
"pid":pid,
"name":“名称",
"pname":"产品名称"
"class":"类名"
}
实例:
<template>
<view class="button-sp-area">
<button type="primary" plain="true" @click="OpenHid()">打开</button>
<button type="primary" plain="true" @click="SendDataCall()">发送(要回调)</button>
<button type="primary" plain="true" @click="SendData()">发送(不要回调)</button>
<button type="primary" plain="true" @click="getdeviceList()">获取设备列表</button>
<button type="primary" plain="true" @click="SetCllBack()">设置回调地址</button>
</view>
</template>
<script>
const modal = uni.requireNativePlugin('modal');
const UsbHid = uni.requireNativePlugin('SnowStorm-Hid');
function usbEvent(data){
const msg = JSON.stringify(data);
modal.toast({
message: msg,
duration: 1.5
});
}
export default {
data() {
return {
title: ''
}
},
onLoad() {
},
methods: {
getdeviceList()
{
UsbHid.getHidDeviceList(result => {
const msg = JSON.stringify(result);
modal.toast({
message: msg,
duration: 1.5
});
});
},
SetCllBack()
{
UsbHid.setUsbEvent(usbEvent,usbEvent);
},
SendDataCall()
{
var data=[
0xA2,0x13,0xB4,0x2,0x0,0xFD,0xFF,0x6,
0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
UsbHid.SendData(data,result => {
const msg = JSON.stringify(result);
modal.toast({
message: msg,
duration: 1.5
});
});
},
SendData()
{
var data=[
0xA2,0x13,0xB4,0x2,0x0,0xFD,0xFF,0x6,
0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
UsbHid.SendData(data);
},
OpenHid() {
UsbHid.OpenDevice(3118,2311,result => {
const msg = JSON.stringify(result);
modal.toast({
message: msg,
duration: 1.5
});
switch (result.type) {
case 'button':
console.log("callback---button--" + result.index);
break;
case 'checkBox':
console.log("callback---checkBox--" + result.isSelected);
break;
case 'a':
console.log("callback---a--" + JSON.stringify(result));
break;
case 'backCancel':
console.log("callback---backCancel--");
break;
}
});
}
}
}
</script>
<style>
button {
margin-top: 30upx;
margin-bottom: 30upx;
}
.button-sp-area {
margin: 0 auto;
width: 60%;
}
.content {
text-align: center;
height: 400upx;
}
.wrapper {
flex-direction: column;
justify-content: center;
}
.button {
width: 200px;
margin-top: 30px;
margin-left: 20px;
padding-top: 20px;
padding-bottom: 20px;
border-width: 2px;
border-style: solid;
border-color: #458B00;
background-color: #458B00;
}
.text {
font-size: 30px;
color: #666666;
text-align: center;
}
</style>