Android CameraX的自定义生命周期
我正在尝试使用CameraX添加相机片段。但是当我将其与viewPager(tablayout)一起使用时,我需要在调用onPause()函数时关闭相机(就像我切换tab时相机应该关闭一样)。但是使用片段的默认生命周期,当片段被销毁时,它将关闭 因此,我尝试创建一个自定义生命周期(代码如下所示)。但它不工作相机甚至都没打开Android CameraX的自定义生命周期,android,android-lifecycle,android-camerax,Android,Android Lifecycle,Android Camerax,我正在尝试使用CameraX添加相机片段。但是当我将其与viewPager(tablayout)一起使用时,我需要在调用onPause()函数时关闭相机(就像我切换tab时相机应该关闭一样)。但是使用片段的默认生命周期,当片段被销毁时,它将关闭 因此,我尝试创建一个自定义生命周期(代码如下所示)。但它不工作相机甚至都没打开 class CustomLifecycle : LifecycleOwner { private val lifecycleRegistry: LifecycleRe
class CustomLifecycle : LifecycleOwner {
private val lifecycleRegistry: LifecycleRegistry = LifecycleRegistry(this)
init {
lifecycleRegistry.currentState = Lifecycle.State.CREATED
}
fun doOnResume() {
lifecycleRegistry.currentState = Lifecycle.State.RESUMED
}
fun doOnDestroy() {
lifecycleRegistry.currentState = Lifecycle.State.DESTROYED
}
override fun getLifecycle(): Lifecycle {
return lifecycleRegistry
}
}
将cameraProvider绑定到生命周期
camera = cameraProvider.bindToLifecycle(
CustomLifecycle(), cameraSelector, preview, imageCapture, imageAnalyzer
)
我不知道该怎么做
当绑定的用例变为活动和非活动时,任何建议都将受到
ON\u START
和ON\u STOP
生命周期事件控制的欢迎。当用例处于活动状态时,它希望开始从它所连接的相机接收数据(帧)。当用例处于非活动状态时,它不再需要来自其所连接的相机的数据
当您第一次将用例绑定到自定义生命周期时,您应该立即在启动时将其状态移动到(甚至在恢复时移动到)。这将启动预览,分析器将开始接收相机帧,您将能够捕获图像。
调用片段的onPause()
回调时,可以将自定义生命周期的状态移动到ON\u STOP
。当片段最终销毁时,确保将生命周期的状态移动到销毁时的,以释放相机资源
在代码方面,您可以查看一个内部使用的CameraX。您可以将其用于您的用例,如下所示
class CameraFragment: Fragment() {
private val customLifecycleOwner = CustomLifecycleOwner()
override fun onViewCreated(view, savedState) {
super.onViewCreated(view, savedState)
// Initialize CameraX
// Build use cases
cameraProvider.bindToLifecycle(customLifecycleOwner, selector, useCases)
customLifecycleOwner.startAndResume()
}
override fun onPause() {
super.onPause()
customLifecycleOwner.pauseAndStop()
}
override fun onDestroy() {
super.onDestroy()
customLifecycleOwner.destroy()
}
}