问题描述
我正在开发一个 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() 函数被执行。 结果只有一张图片通过电子邮件发送。
1楼
您正在寻找的是称为回调的基本编程概念(您正在使用 Camera.takePicture() 方法调用)。
请在此处阅读我的回答,因为它也适用于您的情况: