我想在Android Application&通过USB电缆的外部设备。
我已经看到Android USB文档&它是示例代码。我能够检测到&成功连接Android应用程序中的外部设备。
如何在外部设备和amp之间传输(发送/接收)数据;Android应用程序?
编辑:
让我解释到目前为止所做的事情。
我找到了设备&它是下面代码的接口。
UsbManager mManager = (UsbManager) getSystemService(Context.USB_SERVICE);
// check for existing devices
for (UsbDevice device : mManager.getDeviceList().values()) {
ArrayList<UsbInterface> intf = findInterface(device);
}
// searches for an interface on the given USB device
static private ArrayList<UsbInterface> findInterface(UsbDevice device) {
ArrayList<UsbInterface> usbIntf = new ArrayList<UsbInterface>();
int count = device.getInterfaceCount();
for (int i = 0; i < count; i++) {
UsbInterface intf = device.getInterface(i);
if( intf.getEndpointCount() > 0 ) {
for( int j = 0; j < intf.getEndpointCount(); j++ ) {
if( intf.getEndpoint(j).getType() == UsbConstants.USB_ENDPOINT_XFER_ISOC ) {
usbIntf.add(intf);
}
}
}
}
return usbIntf;
}
然后打开设备连接&amp;通过以下代码对接口的索赔。
// open device connection
UsbDeviceConnection connection = mManager.openDevice(device);
boolean isSuccess = false;
if (connection != null) {
for (int i = 0; i < usbIntf.size(); i++) {
UsbInterface intf = usbIntf.get(i);
isSuccess = connection.claimInterface(intf, false);
}
}
SoiperInterface将成功返回给我。
根据Android开发人员DOC,为USB_DIR_IN&amp; 1280对于USB_DIR_OUT。因此,我采用了这两个接口。 我在&amp;以下面的代码输出端点。
for( int i = 0; i < usbIntf.size(); i++ ) {
UsbInterface intf = usbIntf.get(i);
for (int j = 0; j < intf.getEndpointCount(); j++) {
UsbEndpoint ep = intf.getEndpoint(j);
if( ep.getType() == UsbConstants.USB_ENDPOINT_XFER_ISOC ) {
if( ep.getDirection() == UsbConstants.USB_DIR_OUT ) {
epOut = ep;
}
else if ( ep.getDirection() == UsbConstants.USB_DIR_IN ) {
epIn = ep;
}
}
}
}
外部设备详细信息:
Device Class : 0, Subclass : 0, Protocol : 0,
Device ID : 2002, Device Name : /dev/bus/usb/002/002,
Interface Count : 6, Product Id : 316, Vendor ID : 3468
intarface&amp;这是终点详细信息:
1. Interface Class : 1, Subclass : 1, Protocol : 0, EndpointCount : 0, ID : 0
2. Interface Class : 1, Subclass : 2, Protocol : 0, EndpointCount : 0, ID : 1
3. Interface Class : 1, Subclass : 2, Protocol : 0, EndpointCount : 1, ID : 1
Endpoint : 0 : Type : 1, Direction : 0,
Details : UsbEndpoint[mAddress=1,mAttributes=9,mMaxPacketSize=200,mInterval=1]
4. Interface Class : 1, Subclass : 2, Protocol : 0, EndpointCount : 0, ID : 2
5. Interface Class : 1, Subclass : 2, Protocol : 0, EndpointCount : 1, ID : 2
Endpoint : 0 : Type : 1, Direction : 128,
Details : UsbEndpoint[mAddress=130,mAttributes=9,mMaxPacketSize=100,mInterval=1]
6. Interface Class : 3, Subclass : 0, Protocol : 0, EndpointCount : 1, ID : 3
Endpoint : 0 : Type : 3, Direction : 128,
Details : UsbEndpoint[mAddress=135,mAttributes=3,mMaxPacketSize=4,mInterval=2]
用于转移http://developer.android.com/reference/reference/android/android/hardware/usb/usbdeviceconnection.html#bulktransfer(Android.hardware.hardware.usb.usbendware.usbendware.usbendpoint.usbendpoint,byte,byte,byte,byte [],int,int)