關於如何監聽設備插拔以及獲取設備權限我就不說瞭,大傢可以在網上搜一下有很多這方面的文章,我這裡就說一下如何讀寫數據。
UsbInterface usbInterface = usbDevice.getInterface(0); //USBEndpoint為讀寫數據所需的節點 UsbEndpoint inEndpoint = usbInterface.getEndpoint(0); //讀數據節點 UsbEndpoint outEndpoint = usbInterface.getEndpoint(1); //寫數據節點 UsbDeviceConnection connection = usbManager.openDevice(usbDevice); connection.claimInterface(usbInterface, true); //發送數據 byte[] byte2 = new byte[64]; int out = connection.bulkTransfer(outEndpoint, cmd, cmd.length, 3000); //讀取數據1 兩種方法讀取數據 int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000); Log.e("ret", "ret:"+ret); for(Byte byte1 : byte2){ System.err.println(byte1); } //讀取數據2 /*int outMax = outEndpoint.getMaxPacketSize(); int inMax = inEndpoint.getMaxPacketSize(); ByteBuffer byteBuffer = ByteBuffer.allocate(inMax); UsbRequest usbRequest = new UsbRequest(); usbRequest.initialize(connection, inEndpoint); usbRequest.queue(byteBuffer, inMax); if(connection.requestWait() == usbRequest){ byte[] retData = byteBuffer.array(); for(Byte byte1 : retData){ System.err.println(byte1); } }*/ UsbInterface usbInterface = usbDevice.getInterface(0); //USBEndpoint為讀寫數據所需的節點 UsbEndpoint inEndpoint = usbInterface.getEndpoint(0); //讀數據節點 UsbEndpoint outEndpoint = usbInterface.getEndpoint(1); //寫數據節點 UsbDeviceConnection connection = usbManager.openDevice(usbDevice); connection.claimInterface(usbInterface, true); //發送數據 byte[] byte2 = new byte[64]; int out = connection.bulkTransfer(outEndpoint, cmd, cmd.length, 3000); //讀取數據1 兩種方法讀取數據 int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000); Log.e("ret", "ret:"+ret); for(Byte byte1 : byte2){ System.err.println(byte1); } //讀取數據2 /*int outMax = outEndpoint.getMaxPacketSize(); int inMax = inEndpoint.getMaxPacketSize(); ByteBuffer byteBuffer = ByteBuffer.allocate(inMax); UsbRequest usbRequest = new UsbRequest(); usbRequest.initialize(connection, inEndpoint); usbRequest.queue(byteBuffer, inMax); if(connection.requestWait() == usbRequest){ byte[] retData = byteBuffer.array(); for(Byte byte1 : retData){ System.err.println(byte1); } }*/
首先得到可以操作USB設備的節點Endpoint,0為讀數據節點,1未寫數據節點。
然後使用connection.bulkTransfer(endpoint, buffer, length, timeout) 發送數據。
我這裡讀數據的時候有兩種方法,讀數據1和讀數據2
註意:寫數據時傳入的是寫數據節點OutEndpoint,讀數據時傳入的是讀數據節點InEndpoint。