1,监听USB拔出连接,判断是否含有权限
const main = plus.android.runtimeMainActivity()
const IntentFilter = plus.android.importClass('android.content.IntentFilter')
const action = 'android.hardware.usb.action.USB_STATE'
const deviceList = []
let usbManager = null
let connection = null
let mUsbInterface = null
let inEndpoint = null
let outEndpoint = null
var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: getReceive
})
var filter = new IntentFilter()
filter.addAction(action)
main.registerReceiver(receiver, filter)
function getReceive(context, intent) {
var type = intent.getAction()
if (type === action) {
var connected = intent.getExtras()
plus.android.importClass(connected)
var isusb = connected.getBoolean('connected')
const localUsbDevice = intent.getParcelableExtra('device')
usbManager = context.getSystemService(Context.USB_SERVICE)
const mDevices = usbManager.getDeviceList()
const mPendingIntent = PendingIntent.getBroadcast(context, 0, new Intent(
'ACTION_USB_PERMISSION'), 0)
const iterator = mDevices.values().iterator()
while (iterator.hasNext()) {
const usb = iterator.next()
if (!usbManager.hasPermission(usb)) {
uni.$emit('times', 'has not permission')
// 获取权限弹框
usbManager.requestPermission(usb, mPendingIntent)
} else {
uni.$emit('times', 'has permission')
}
deviceList.push(usb)
}
}
}
2,获取权限后,打开设备实现连接
// 打开设备
function openDevice() {
deviceList.forEach(usb => {
mUsbInterface = getUsbInterface(usb) // usb.getInterface(0)
if(!mUsbInterface) return
const enu = enumerateEndPoint(mUsbInterface)
if(!enu) return
connection = usbManager.openDevice(usb)
const bool = connection.claimInterface(mUsbInterface, true)
uni.$emit('times', bool)
})
}
function enumerateEndPoint(sInterface) {
if (sInterface == null)
return false;
for (let i = 0; i < sInterface.getEndpointCount(); ++i) {
const endPoint = sInterface.getEndpoint(i);
if (endPoint.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK &&
endPoint.getMaxPacketSize() == 0x20) {
if (endPoint.getDirection() == UsbConstants.USB_DIR_IN) {
inEndpoint = endPoint;
} else {
outEndpoint = endPoint;
}
}
}
return true;
}
// 获取连接接口
function getUsbInterface(paramUsbDevice) {
if (connection != null) {
if (mUsbInterface != null) {
connection.releaseInterface(mUsbInterface);
mUsbInterface = null;
}
connection.close();
mUsbInterface = null;
}
if (paramUsbDevice == null)
return null;
for (let i = 0; i < paramUsbDevice.getInterfaceCount(); i++) {
const intf = paramUsbDevice.getInterface(i);
if (intf.getInterfaceClass() == 0xff &&
intf.getInterfaceSubclass() == 0x01 &&
intf.getInterfaceProtocol() == 0x02) {
return intf;
}
}
return null;
}
3,读写发送接受数据
function writeData(str) {
if (connection === null) {
openDevice()
uni.$emit('times', '未连接')
return
}
const sendBytes = str2Bytes('你是对的')
const out = connection.bulkTransfer(outEndpoint, sendBytes, sendBytes.length, 5000)
uni.$emit('times', '发送' + out)
const bytes = []
const inn = connection.bulkTransfer(inEndpoint, bytes, bytes.length, 1000)
uni.$emit('times', '接收,' + inn + ',' + bytes)
}