1

我正在尝试在我的 Android 应用程序上使用 OTG 电缆连接 USB 相机,为此我使用了UVCCamera 存储库。所有示例和我的应用程序在我测试过的大多数设备上都可以正常工作,但在摩托罗拉 E4 上却不行(我特别需要在其上运行应用程序)。

我注意到的是,在我授予使用权限后,UsbDevice 立即分离,然后作为新设备重新连接。如果我不检查是否发生这种情况,我会收到 NullPointerException,因为在尝试获取原始描述符时与设备的连接为空。

以下是我收到的错误消息:

E/UsbManager: exception in UsbManager.openDevice
          java.lang.IllegalArgumentException: device /dev/bus/usb/001/008 does not exist or is restricted
              at android.os.Parcel.readException(Parcel.java:1688)
              at android.os.Parcel.readException(Parcel.java:1637)
              at android.hardware.usb.IUsbManager$Stub$Proxy.openDevice(IUsbManager.java:443)
              at android.hardware.usb.UsbManager.openDevice(UsbManager.java:353)
              at com.serenegiant.usb.USBMonitor$UsbControlBlock.<init>(USBMonitor.java:1011)
              at com.serenegiant.usb.USBMonitor$UsbControlBlock.clone(USBMonitor.java:1034)
              at com.serenegiant.usb.UVCCamera.open(UVCCamera.java:192)
              at com.serenegiant.usbcameracommon.AbstractUVCCameraHandler$CameraThread.handleOpen(AbstractUVCCameraHandler.java:444)
              at com.serenegiant.usbcameracommon.AbstractUVCCameraHandler.handleMessage(AbstractUVCCameraHandler.java:300)
              at com.serenegiant.usbcameracommon.UVCCameraHandler.handleMessage(UVCCameraHandler.java:31)
              at android.os.Handler.dispatchMessage(Handler.java:102)
              at android.os.Looper.loop(Looper.java:154)
              at com.serenegiant.usbcameracommon.AbstractUVCCameraHandler$CameraThread.run(AbstractUVCCameraHandler.java:747)


12-07 16:08:36.074 20866-20883/com.serenegiant.usbcameratest E/AndroidRuntime: FATAL EXCEPTION: USBMonitor Process: com.serenegiant.usbcameratest, PID: 20866 java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] android.hardware.usb.UsbDeviceConnection.getRawDescriptors()' on a null object reference
at com.serenegiant.usb.USBMonitor.updateDeviceInfo(USBMonitor.java:900)
at com.serenegiant.usb.USBMonitor$UsbControlBlock.<init>(USBMonitor.java:974)
t com.serenegiant.usb.USBMonitor$UsbControlBlock.<init>(USBMonitor.java:0)
at com.serenegiant.usb.USBMonitor$3.run(USBMonitor.java:563)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)

Google Play 上使用相同库连接 USB 相机的其他应用程序在摩托罗拉 E4 上也可以正常工作。

我前段时间也在github上发布了这个问题,但没有得到任何答案。

4

0 回答 0