如何等到相机在android中捕获图像?

Posted

技术标签:

【中文标题】如何等到相机在android中捕获图像?【英文标题】:How to wait till the camera capture image in android? 【发布时间】:2017-07-01 19:35:23 【问题描述】:

我正在开发一个 android 应用程序,该应用程序使用前后摄像头以编程方式捕获图像并保存到内部存储器中的文件夹中。 保存图像后,应用程序将通过电子邮件发送文件夹的内容。如何等待应用程序完全捕获图像,否则会发送空白电子邮件?

class MainActivity
 //other codes
 public void buttonClick(View v) 

     CameraService.startCamera(0, true);
     sendEmail();
 

  public void sendEmail()
  
   //get contents from the folder and send the contents using java mail api
  

这是使用前后摄像头捕获图像的类。

class CamearService

   public static void startCamera(int cameraID,final boolean isFirstTime) 
   mCamera = Camera.open(cameraID);
    try 
        mCamera.setPreviewTexture(new SurfaceTexture(10));
     catch (IOException e1) 
    

    Parameters params = mCamera.getParameters();
    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
    params.setPictureFormat(ImageFormat.JPEG);
    params.setJpegQuality(100);
    mCamera.setParameters(params);
    mCamera.startPreview();

    mCamera.takePicture(null, null, null, new PictureCallback() 
        @Override
        public void onPictureTaken(byte[] data, Camera camera) 
            Log.i("hello", "picture-taken");
            if (data != null) 

                mCamera.stopPreview();
                mCamera.release();

                try 

                    BitmapFactory.Options opts = new BitmapFactory.Options();
                    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
                            data.length, opts);

                    storeImage(bitmap); //function to store image to local folder
                    if(isFirstTime)
                    
                        //Capture using front camera
                        CameraService.startCamera(1, false);
                    

                 catch (Exception e) 
                    e.printStackTrace();
                

            
        
    );

 

当我单击按钮时 startCamera() 函数被执行并且在捕获第二个图像之前 sendEmail() 函数被执行。因此,只有一张图像通过电子邮件发送。

【问题讨论】:

你是如何准确捕捉图像的? Once the image is saved the application will send the contents of the folder through email. 。好吧,仅此而已!那就永远不会出错。 请贴一些代码。 也许您在问如何让用户进入应用程序前台,直到文件夹的内容通过邮件发送? 我会发布一些代码 【参考方案1】:

您正在寻找的是称为回调的基本编程概念(您与 Camera.takePicture() 方法调用一起使用)。

请在此处阅读我的回答,因为它也适用于您的情况: Handle data returned by an Async task (Firebase)

【讨论】:

以上是关于如何等到相机在android中捕获图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中显示最后从相机捕获的图像?

Android - 如何从相机捕获图像或从库中添加

Android自动裁剪相机捕获的图像

如何在片段中从相机捕获图像,

如何在 Android 中的相机捕获图像上设置实时帧

如何在android中结合覆盖位图和捕获的图像?