gpt4 book ai didi

java - 在android中使用相机拍照后如何永久保存图像?

转载 作者:行者123 更新时间:2023-12-01 17:03:29 24 4
gpt4 key购买 nike

我知道这已在此处发布多次,但没有一个解决方案对于需要完成的操作不够明确。我想知道我是 Android 编程新手会有所帮助。

这是我创建在应用程序中使用相机的 Intent 的地方。

public void captureImage(View view)
{
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

if(cameraIntent.resolveActivity(getPackageManager())!=null)
{
File imageFile = null;
try {
imageFile = getImageFile();
} catch (IOException e) {
e.printStackTrace();
}
if(imageFile!=null)
{
Uri imageUri = FileProvider.getUriForFile(this, "com.example.android.fileprovider", imageFile);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(cameraIntent, IMAGE_REQUEST);
}

}

}

下面是我创建图像文件的方法,据我所知,相机图像将临时保存在其中。

    public File getImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmsss").format(new Date());
String imageName = "jpg_"+timeStamp+"_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
//storageDir.mkdirs();
perStorageDir=storageDir;
File imageFile = File.createTempFile(imageName,".jpg", storageDir);
currentImagePath = imageFile.getAbsolutePath();
return imageFile;
}

(使用currentImagePath我只能在应用程序仍在运行时访问照片)

  1. getExternalFilesDir(Environment.DIRECTORY_PICTURES); 如果我尝试在函数之外的任何地方调用它,我的应用程序就会崩溃,我不知道为什么。

  2. File.createTempFile(...) 仅创建一个临时文件。我怎样才能将其永久添加?

  3. 项目中的所有其他相关文件均已进行相应修改以设置权限和功能。

我想做的就是创建一个目录并在每次拍摄照片时将照片存储在其中。即使我关闭并重新打开应用程序或不拍照,我也想访问旧图像等的文件夹。

任何帮助将不胜感激!

最佳答案

如果您想永久保存它,可以保存应用程序特定存储。这是分配给您的应用程序包名称的一种存储类型。

您可以在路径 data/data/your-package-name 中找到它,检查 official documentation了解有关此类存储的更多信息。

我们也应该将这些图像保存在外部存储中。

第 1 步:

授予外部存储权限,因为您将通过在其中保存图像来访问此存储。

第 2 步:

使用 Intent 打开相机并为拍摄的图像创建文件。

    private void openCamera() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
photoFile = null;
try {
photoFile = FileHelper.createImageFile(this);

} catch (IOException ex) {
}

if (photoFile != null) {
photoURI = FileProvider.getUriForFile(this,
"your path",
photoFile);
deleteFile(photoFile.getName());
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, CAMERA_RESULT);
photoFile.deleteOnExit();
}
}
}

createImageFile() 是创建临时文件的方法

   public static File createImageFile(Context context) throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = timeStamp;
File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
;
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
return image;
}

第 3 步:

添加文件提供程序的路径

<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="." />
</paths>

在 list 中,声明此文件提供程序路径,如下所示:

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="cyour authority"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

最后,我在 GitHub 上有一个完整的存储库。你可以探索一下,我认为它可以帮助你。

快乐编码🤓

关于java - 在android中使用相机拍照后如何永久保存图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61483186/

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