如何在服务或接收器中不使用XML和PreviewView使用CameraX?

4

我想在服务中使用CameraX拍照,不需要任何XML和PreviewView或其他用于显示图片的东西,但是我遇到了问题。


请放置一些代码并描述您的问题,目前这个问题太过宽泛了... - snachmsm
4个回答

0

您可以创建一个客户服务来扩展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.gradle 应该声明依赖项

 implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"

并在清单文件中声明此服务

<service
        android:name=".cameraService"/>

这是如何显示预览的呢? - Sid

0
你应该使用Camera2,这个问题是错误的。

0
要访问相机,您可能需要使用前台服务
从您的问题中不清楚您想要使用相机做什么,但如果您想要拍照,您需要在服务中设置相机并使用ImageCapture用例。

0
相机X使用案例(预览、图像分析和图像捕获)都是完全独立的。
只将ImageCapture绑定到生命周期中,不需要需要PreviewView的任何预览。它将可以工作。

我可以确认 - user1060873

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接