我遵循这个codelab来创建一个cameraX应用程序。
在我手机里很正常。但我正在开发的应用程序是为一个安卓媒体player.Which没有任何内置摄像头,只有一个外部的优盘摄像头。
这是我启动相机的密码。
private void startCamera() {
ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
Preview preview = new Preview.Builder().build();
preview.setSurfaceProvider(viewFinder.getSurfaceProvider());
imageCapture = new ImageCapture.Builder().build();
cameraProviderFuture.addListener(() -> {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
cameraProvider.unbindAll();
cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA,preview,imageCapture);
} catch (ExecutionException e) {
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
} catch (InterruptedException e) {
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
catch (IllegalArgumentException e){
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}, ContextCompat.getMainExecutor(this)
);
}
它扔IllegalArgumentException说没有摄像头连接。
在cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA,preview,imageCapture);
中
只有CameraSelector.DEFAULT_FRONT_CAMERA
和CameraSelector.DEFAULT_BACK_CAMERA
可用。
如何进入外部摄像头?
来自play商店的开式照相机应用程序运行良好。
发布于 2022-07-21 06:34:05
我已经解决了这个问题,你可以在这个网站上找到我的项目代码:
我创建了一个过滤器:
@SuppressLint("UnsafeExperimentalUsageError")
class MyCameraFilter implements CameraFilter {
@SuppressLint("RestrictedApi")
@NonNull
@Override
public LinkedHashSet<Camera> filter(@NonNull LinkedHashSet<Camera> cameras) {
Log.i(TAG, "cameras size: " + cameras.size());
Iterator<Camera> cameraIterator = cameras.iterator();
Camera camera = null;
while (cameraIterator.hasNext()) {
camera = cameraIterator.next();
String getImplementationType = camera.getCameraInfo().getImplementationType();
Log.i(TAG, "getImplementationType: " + getImplementationType);
}
LinkedHashSet linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(camera); // 最后一个camera
return linkedHashSet;
}
}
并将其传递给CameraSelector:
cameraSelector = new CameraSelector.Builder().addCameraFilter(new MyCameraFilter()).build();
现在我可以使用usb摄像头了。我开发的android芯片是Android 11,日志“摄像头大小:”会告诉你有多少摄像头连接到usb上。默认情况下选择最后一个摄像机。
发布于 2022-03-31 07:52:04
到目前为止,CameraX不支持外部usb摄像头。而不是CameraX,您可以使用Camer2API。
https://stackoverflow.com/questions/67456753
复制相似问题