我正在尝试在 Kotlin/Android 中使用 Camera2 API 实现 CameraViewFinder。但我遇到了这样的错误,
无法访问“”:它是包私有的 '取景器表面请求'。
import androidx.camera.viewfinder.ViewfinderSurfaceRequest
import androidx.camera.viewfinder.CameraViewfinder
val viewfinderSurfaceRequest =
ViewfinderSurfaceRequest(
Size(640, 480),
characteristics.get(CameraCharacteristics.LENS_FACING)!!,
characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION)!!,
CameraViewfinder.ImplementationMode.PERFORMANCE
)
val surfaceListenableFuture =
cameraViewFinder.requestSurfaceAsync(viewfinderSurfaceRequest)
Futures.addCallback(surfaceListenableFuture, object : FutureCallback<Surface> {
override fun onSuccess(result: Surface?) {
/* create a CaptureSession using this surface as usual */
}
override fun onFailure(t: Throwable) { /* something went wrong */
}
}, ContextCompat.getMainExecutor(cameraViewFinder.context))
在我的build.gradle:
implementation "androidx.camera:camera-camera2:1.3.0-rc01"
implementation "androidx.camera:camera-lifecycle:1.3.0-rc01"
implementation "androidx.camera:camera-view:1.3.0-rc01"
implementation "androidx.camera:camera-viewfinder:1.3.0-beta02"
当我导航到 ViewfinderSurfaceRequest 的源代码时,它被声明为公共,正如它应该的那样。怎么了?
构造函数不是公开的 - 您应该使用 Builder 创建请求的实例:https://developer.android.com/reference/androidx/camera/viewfinder/ViewfinderSurfaceRequest.Builder
这样您就可以在适当的情况下使用默认值或 XML 布局。
您还可以使用扩展方法跳过CameraCharacteristics中的几行读取: https://developer.android.com/reference/androidx/camera/viewfinder/ViewfinderSurfaceRequest.Builder#(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder).populateFromCharacteristics(android.hardware.camera2.CameraCharacteristics)