Camerax 正在运行。如何在前台服务中获取生命周期所有者或在没有它的情况下运行?

Arp*_*wal 7 android background-service android-camera2 android-camerax

用例:是我必须在没有任何活动或片段的服务中在后台运行相机

拦截器:新的camerax 会话绑定到生命周期所有者,但该服务没有任何。那么如何获取此对象或在没有它的情况下运行?

已经尝试过:我可以用 Camera2 库做同样的事情,但我想知道是否可以用 Camerax 也因为 Camera2 api 将来可能会被弃用。或者谷歌故意阻止用户在没有活动的情况下运行相机?

请建议

Mar*_*vas 5

您是否尝试过扩展LifecycleService而不是常规的Service?为此,您需要将其添加androidx.lifecycle:lifecycle-service:2.x.y为 gradle 文件中的依赖项(如果尚未添加)。然后,当您调用bindToLifecycle方法时,您只需this作为参数传递,它应该可以工作:

class ExampleService : LifecycleService() {
    // here should be use case implementation
    ...
    processCameraProvider.bindToLifecycle(this, ...)
Run Code Online (Sandbox Code Playgroud)

(免责声明:没有对此进行测试,所以我不能 100% 确定)。

此外,从 Android 11 开始,您应该包含以下代码片段才能使其正常工作:

<manifest>
...
<service ... android:foregroundServiceType="camera" />
Run Code Online (Sandbox Code Playgroud)

更多内容请参见LifecycleService 此处