如何在服务或接收器中使用没有 XML 和 PreviewView 的 CameraX?
Posted
技术标签:
【中文标题】如何在服务或接收器中使用没有 XML 和 PreviewView 的 CameraX?【英文标题】:How to use CameraX without XML and PreviewView in service or Receiver? 【发布时间】:2021-04-29 23:48:58 【问题描述】:我想在服务中使用没有任何 xml 和 PreviewView 或其他显示图片的 CameraX 拍照,但我有问题。
【问题讨论】:
输入一些代码并描述你的问题,目前这个问题很广泛...... 【参考方案1】:你应该使用Camera2,这个问题是错误的
【讨论】:
【参考方案2】:CameraX 用例(Preview、ImageAnalysis 和 ImageCapture)都是完全独立的。
仅将 ImageCapture 绑定到生命周期,而不需要任何需要 PreviewView 的 Preview。它会起作用的。
【讨论】:
我可以确认【参考方案3】:要访问相机,您可能必须使用foreground service。
从你的问题中不清楚你想用相机做什么,但如果你想拍照,你需要在你的服务中设置相机并使用@987654322 @用例。
【讨论】:
【参考方案4】:您可以创建一个客户服务来扩展 LifecyleService 类,如下所示:(cameraSelector 和 ImageCapture)
public class cameraService extends LifecycleService
@Override
public int onStartCommand(Intent intent, int flags, int startId)
RunCameraX();
return super.onStartCommand(intent, flags, startId);
RunCameraX()
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
//select-usecase
//Camera facing, image analysis & no preview
Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector2,imageCapture );
imageCapture.takePicture(outputFileOptions, executor, new ImageCapture.OnImageSavedCallback ()
@Override
public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults)
new Handler(Looper.getMainLooper()).post(new Runnable()
@Override
public void run()
//todo
);
@Override
public void onError(@NonNull ImageCaptureException error)
error.printStackTrace();
);
Build.grade 应该声明依赖,
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
并在 Manifest 文件中声明此服务
<service
android:name=".cameraService"/>
【讨论】:
以上是关于如何在服务或接收器中使用没有 XML 和 PreviewView 的 CameraX?的主要内容,如果未能解决你的问题,请参考以下文章