前提
最近做的项目在android5.0的系统的开发板连多个usb设备,偶尔会出现设备无反应的情况,通过调试发现UsbDevice的mInterfaces会离奇出现空的情况,刷回4.4则没这个情况出现,我感觉应该是系统api的问题,于是上网搜索,发现
android framework之旅(六)Usb多串口同时打开 有大神也遇到这种情况并分析是系统api的锅,文中作者的解决方法是修改系统api,重编译Android Framework 模块并写进系统。
应用级别的解决方案
看到原作者的分析,如果只是设备信息丢失的话,是否可以通过反射UsbDevice来把usb设备的信息补全呢?看了下源码果然是可以的
下面是UsbDevice 部分源码
下面是UsbConfiguration 部分源码
|
|
下面是UsbInterface 部分源码
下面是UsbEndpoint 部分源码
其中UsbDevice的getInterface是我们应用能访问到的接口,通过分析getInterfaceList可见,只要修改mConfigurations里面的mInterfaces即可达到补齐信息的效果,那么我们可以记录设备的信息再通过以下反射类的代码把信息补全即可。