问题描述:
app中用到外接usb 设备,但是其他应用也是用到了usb,那么就存在一个问题,当别的应用先通过授权的方式获取到usb 权限,并且申请了独占模式,别的应用就无法再通过usb 传输数据,即使你已经通过了usb 获取到权限,并且可以正常的获取到
UsbDevice 设备,并且通过openDevice获取到UsbDeviceConnection,也可以获取到设备id.但是就是无法读写数据.
这是我的正常操作:
UsbDevice device = (UsbDevice) intent.getParcelableExtra (UsbManager.EXTRA_DEVICE);
UsbManager usbManager= (UsbManager) getSystemService (Context.USB_SERVICE);
UsbDeviceConnection connection = usbManager.openDevice (device);
独占模式:
connection.claimInterface (device.getInterface (0),true);
connection.releaseInterface (device.getInterface (0));
当设置这两个参数后表示启动了独占模式,claimInterface 方法是告诉linux 断开这个端口的设备,releaseInterface 是启动这个端口独占模式.
可以参考android api 文档的解释:http://www.android-doc.com/reference/android/hardware/usb/UsbDeviceConnection.html#claimInterface(android.hardware.usb.UsbInterface,%20boolean)
解决问题:
在获取到UsbDeviceConnection 后通过设置
connection.claimInterface (device.getInterface (0),true);
connection.releaseInterface (device.getInterface (0));
独占模式,可以解决usb 被占用的问题,当然别的设备也可以通过这种方式,重新获取到设备.