Ara*_* OR 5 android android-camera android-camerax
我正在按照此Codelab创建一个cameraX应用程序。
它在我的手机上运行良好。但我正在开发的应用程序是针对 Android 媒体播放器的。它没有任何内置摄像头,仅连接了外部 USB 摄像头。
这是我启动相机的代码。
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)
);
}
Run Code Online (Sandbox Code Playgroud)
它抛出IllegalArgumentException说没有连接相机。
在cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA,preview,imageCapture);
唯一CameraSelector.DEFAULT_FRONT_CAMERA且CameraSelector.DEFAULT_BACK_CAMERA
可用。
如何访问外部摄像头?
从 Play 商店打开相机应用程序运行良好。
小智 1
我已经解决了这个问题,你可以在这个网站找到我的项目代码:
\n\n我创建一个过滤器:
\n@SuppressLint("UnsafeExperimentalUsageError")\nclass MyCameraFilter implements CameraFilter {\n\n @SuppressLint("RestrictedApi")\n @NonNull\n @Override\n public LinkedHashSet<Camera> filter(@NonNull LinkedHashSet<Camera> cameras) {\n Log.i(TAG, "cameras size: " + cameras.size());\n Iterator<Camera> cameraIterator = cameras.iterator();\n Camera camera = null;\n while (cameraIterator.hasNext()) {\n camera = cameraIterator.next();\n String getImplementationType = camera.getCameraInfo().getImplementationType();\n Log.i(TAG, "getImplementationType: " + getImplementationType);\n }\n LinkedHashSet linkedHashSet = new LinkedHashSet<>();\n linkedHashSet.add(camera); // \xe6\x9c\x80\xe5\x90\x8e\xe4\xb8\x80\xe4\xb8\xaacamera\n return linkedHashSet;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n并将其传递给 CameraSelector:
\ncameraSelector = new CameraSelector.Builder().addCameraFilter(new MyCameraFilter()).build();\nRun Code Online (Sandbox Code Playgroud)\n现在我可以访问 USB 摄像头了。我开发的 Android 芯片是 Android API 11\n日志“cameras size:”会告诉您有多少个相机连接到 USB。默认选择最后一个摄像机。
\n| 归档时间: |
|
| 查看次数: |
4014 次 |
| 最近记录: |