【问题】
android项目中,由于为了支持debug模式。
而要去对于UsbDevice去新生成一个模拟的,伪造的,供后续调试使用。
【解决过程】
1.结果去使用:
UsbDevice supportedUsbSerialDevice = null; UsbDevice usbDevice = new UsbDevice(); supportedUsbSerialDevice = usbDevice;
却提示出错:
The constructor UsbDevice() is not visible |
如图:
很明显,此处不给直接new一个UsbDevice。
2.搜:
android new UsbDevice
找到:
http://www.oschina.net/code/explore/android-4.0.1/core/java/android/hardware/usb/UsbDevice.java
中的:
public static final Parcelable.Creator<UsbDevice> CREATOR = new Parcelable.Creator<UsbDevice>() { public UsbDevice createFromParcel(Parcel in) { String name = in.readString(); int vendorId = in.readInt(); int productId = in.readInt(); int clasz = in.readInt(); int subClass = in.readInt(); int protocol = in.readInt(); Parcelable[] interfaces = in.readParcelableArray(UsbInterface.class.getClassLoader()); return new UsbDevice(name, vendorId, productId, clasz, subClass, protocol, interfaces); } public UsbDevice[] newArray(int size) { return new UsbDevice[size]; } };
但是由于不提供接口,所以没法写类似的new的代码。
3.参考:
Fake serial number of USB device
无解。
4.写成:
//UsbDevice usbDevice = new UsbDevice(); Parcel usbDevArg0 = new Parcel(); UsbDevice usbDevice = UsbDevice.CREATOR.createFromParcel(usbDevArg0); supportedUsbSerialDevice = usbDevice;
但是接下来不知道如何给Parcel传递何种参数,才能fake出一个UsbDevice。
5.再去看:
http://www.oschina.net/code/explore/android-4.0.1/core/java/android/hardware/usb/UsbDevice.java
发现对应的UsbDevice是有new的,所以去试试:
UsbDevice usbDevice = new UsbDevice( fakeUsbDevName, fakeUsbDevVendorId, fakeUsbDevProductId, fakeUsbDevClass, fakeUsbDevSubclass, fakeUsbDevProtocol, fakeUsbInterfaces);
结果还是不行:
The constructor UsbDevice(String, int, int, int, int, int, Parcelable[]) is undefined |
6.后来折腾半天,去试试:
UsbDevice usbDevice; try { usbDevice = UsbDevice.class.newInstance(); supportedUsbSerialDevice = usbDevice; } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }
结果会出现InstantiationException。
【总结】
结果:
还是无法生成一个可用的,可被系统的USB相关函数操作的UsbDevice。。。
暂时放弃折腾了。。。