gpt4 book ai didi

android - 如何在尝试访问图片之前确保 JpegCallback 完成写入

转载 作者:太空狗 更新时间:2023-10-29 13:28:12 26 4
gpt4 key购买 nike

我正在编写一个应用程序,其中一个关键功能是拍摄照片并将其写入文件,然后将该照片读入 base64 数组(所有这些都通过单击一个按钮完成)。问题是,当我启动 onclick 拍照时,它会在 onPhotoTaken() 函数接收到图像并将其写入指定的存储目录之前从该函数返回。

我在代码的几个阶段添加了日志输出,很明显 onclick takePhoto 函数在它调用的 onPhotoTaken() 函数完成之前退出。

android 文档指出您需要等待 JpegCallback 完成返回才能重新开始预览,但我无法让它等待写入完成。

代码:

public static void takePhoto(){
fCamera.takePicture(null, null, jpegCallback);
Log.d("capture", "photo was captured");
// Set the image callback
Log.d("this one is", "being called");

}

static PictureCallback jpegCallback = new Camera.PictureCallback() {
// Function for handling the picture
public void onPictureTaken(byte[] data, Camera fCamera){
//fCamera.stopPreview();
Log.d("is this", "not being called ??? probably");
File imagePath;
FileOutputStream out = null;
// create the filename with extension
String fileName = "IMAGE_1.bmp";
// Create / Find the storage Directory for our pictures
//storageDir = context.getDir("imageDir", Context.MODE_PRIVATE);
// Create it if it doesn't exist
// Create the image file
imagePath = new File(storageDir, fileName);
String finalPath = imagePath.getAbsolutePath();
Log.d("location", finalPath);
if (!imagePath.exists()) {
if (!imagePath.mkdirs())
Log.d("@string/app_name", "Failed to create File");
return;

}

try {
out = new FileOutputStream(imagePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//finalImage.compress(CompressFormat.PNG, 100, out);
try {
out.write(data);
Log.d("write", "photo was written");
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
};

日志猫:

 10-13 12:55:39.185: D/capture(7126): photo was captured
10-13 12:55:39.185: D/this one is(7126): being called

这些是唯一发生的日志输出。

最佳答案

我有同样的问题,通过拍照然后尝试创建缩略图并将其存储到媒体库中。正如此处定义的那样 (developer.android.com/reference/android/hardware/Camera.html#takePicture) takePicture 是一个异步过程,因此您必须导出程序逻辑并强制执行序列。这可以通过 AsyncTask ( http://developer.android.com/reference/android/os/AsyncTask.html ) 实现在 this例如,onPostExecute 方法中的代码将在 camera.takePicture 之后执行(因此您确定 PictureCallback 的 onPictureTaken 已完成)。

关于android - 如何在尝试访问图片之前确保 JpegCallback 完成写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com