繁体   English   中英

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

[英]How to wait till the camera capture image in android?

我正在开发一个 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() 函数被执行。 结果只有一张图片通过电子邮件发送。

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

请在此处阅读我的回答,因为它也适用于您的情况: 处理异步任务返回的数据 (Firebase)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM