- 在build.gradle中添加依赖项
dependencies {
...
implementation 'com.google.android.gms:play-services-vision:20.1.3'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.camera:camera-core:1.1.0-alpha06'
implementation 'androidx.camera:camera-camera2:1.1.0-alpha06'
implementation 'androidx.camera:camera-lifecycle:1.1.0-alpha06'
}
- 在MainActivity类中声明变量
private lateinit var cameraExecutor: ExecutorService
private lateinit var viewFinder: TextureView
private lateinit var outputDirectory: File
private val REQUEST_CODE_PERMISSIONS = 10
private val REQUIRED_PERMISSIONS = arrayOf(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
- 在onCreate方法中初始化变量和设置TextureView.SurfaceTextureListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewFinder = findViewById(R.id.view_finder)
if (allPermissionsGranted()) {
viewFinder.post { startCamera() }
} else {
ActivityCompat.requestPermissions(
this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS)
}
cameraExecutor = Executors.newSingleThreadExecutor()
outputDirectory = getOutputDirectory()
viewFinder.surfaceTextureListener = surfaceTextureListener
}
- 在startCamera方法中配置CameraX和Preview
private fun startCamera() {
val previewConfig = PreviewConfig.Builder().apply {
setTargetResolution(Size(640, 480))
}.build()
val preview = Preview(previewConfig)
preview.setOnPreviewOutputUpdateListener {
viewFinder.surfaceTexture = it.surfaceTexture
}
val videoFile = File(outputDirectory, "video.mp4").apply {
createNewFile()
}
val videoCaptureConfig = VideoCaptureConfig.Builder().apply {
setTargetResolution(Size(640, 480))
setTargetRotation(viewFinder.display.rotation)
setAudio(Audio.ON)
}.build()
val videoCapture = VideoCapture(videoCaptureConfig)
findViewById