如何将相机预览放在扩展 InputMethodService 的类中?

问题描述

我正在创建一个自定义键盘,并在键盘内放置了一个相机的预览视图。但我似乎无法将它绑定到生命周期或获取相机提要。我的键盘查看服务如下:

public class MainActivity extends InputMethodService
{
    private LinearLayout keyboardView;
    InputMethodManager imm;
    PreviewView mPreviewView;
    Button capture;

    @SuppressLint("InflateParams")
    @Override
    public View onCreateInputView()
    {
        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        LayoutInflater inflater=getLayoutInflater();
        mPreviewView=(PreviewView)inflater.inflate(R.layout.keyboard_view,null).findViewById(R.id.camera);
        capture=(Button)inflater.inflate((R.layout.keyboard_view),null).findViewById(R.id.button);
        keyboardView = (LinearLayout) inflater.inflate(R.layout.keyboard_view,null);
        startCamera();
        return keyboardView;
    }


    //endregion
    private void startCamera() {

        final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);

        cameraProviderFuture.addListener(new Runnable() {
            @Override
            public void run() {
                try {

                    ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
                    bindPreview(cameraProvider);

                } catch (ExecutionException | InterruptedException e) {
                    // No errors need to be handled for this Future.
                    // This should never be reached.
                }
            }
        },ContextCompat.getMainExecutor(getApplicationContext()));
    }

    void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {

        Preview preview = new Preview.Builder()
                .build();

        CameraSelector cameraSelector = new CameraSelector.Builder()
                .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                .build();

        ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                .build();

        ImageCapture.Builder builder = new ImageCapture.Builder();

        //vendor-Extensions (The CameraX extensions dependency in build.gradle)
        HdrImageCaptureExtender hdrImageCaptureExtender = HdrImageCaptureExtender.create(builder);

        // Query if extension is available (optional).
        if (hdrImageCaptureExtender.isExtensionAvailable(cameraSelector)) {
            // Enable the extension if available.
            hdrImageCaptureExtender.enableExtension(cameraSelector);
        }

        final ImageCapture imageCapture = builder
                .build();
        mPreviewView.setScaleType(PreviewView.ScaleType.FILL_CENTER);
        preview.setSurfaceProvider(mPreviewView.getSurfaceProvider());
        Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner) this,cameraSelector,preview,imageAnalysis,imageCapture);

        capture.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bitmap image = mPreviewView.getBitmap();
                //Do something with the bitmap
            }
        });

    }

有什么想法可以在其中实现相机预览视图,或者甚至调用相机捕获意图?两者中的任何一个都可以,直到它无误地将位图返回给我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...