引言

在使用UVC Camera框架的时候 拔出摄像头本应该回调 onDetach 方法以便于后续处理:比如是弹个提示框啥的。但是APP却直接崩溃(闪退)了。

解决方法

关键点在于 libuvccamera 依赖库中的 android_usbfs.chandle_iso_completion (struct libusb_device_handle *handle, struct usbi_transfer *itransfer, struct usbfs_urb *urb)方法中

修改前是这样的:

1
2
3
4
5
6
for (i = 0; i < num_urbs; i++) {
if (urb == tpriv->iso_urbs[i]) {
urb_idx = i + 1;
break;
}
}

拔出USB 摄像头,程序会进入上面这段代码,tpriv->iso_urbs 这个是NULL了,程序就在这里崩溃了

修改成如下:

1
2
3
4
5
6
for (i = 0; i < num_urbs; i++) {
if (tpriv->iso_urbs != NULL && urb == tpriv->iso_urbs[i]) {
urb_idx = i + 1;
break;
}
}

也可以使用如下的代码进行修改:

1
2
3
4
5
6
7
8
9
10
for (i = 0; i < num_urbs; i++) {
if(tpriv->iso_urbs == NULL){
break;
}

if (urb == tpriv->iso_urbs[i]) {
urb_idx = i + 1;
break;
}
}

按照上面的方法修改代码后APP就不会出现崩溃(闪退)了。

推荐链接:Android UVC Camera 闪退问题解决方法
推荐链接:解决Android UVC Camera 项目编译和运行报错的问题

UVCCamera相关内容