如何创建要在Android图库中显示的应用图片文件夹

Nem*_*sis 12 android image gallery

我有一个用户创建图像的应用程序,然后我想保存它,以便它可以从默认的图库应用程序中看到.

现在我不希望将图片保存在与从相机拍摄的图片相同的文件夹中,我希望将它们保存在专用于应用程序的文件夹中,就像来自whatsapp或facebook等应用程序的图像一样.

我试过在这两个地方保存它们:

File imagePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+ File.separator + appDirectoryName + File.separator);
Run Code Online (Sandbox Code Playgroud)

和这里

File imagePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ File.separator + appDirectoryName + File.separator);
Run Code Online (Sandbox Code Playgroud)

如果我浏览手机,我看到我成功保存了图片,但它们没有显示在图库应用中.很明显,我错过了一些东西,但我不知道它是什么.也许在文件或文件夹中添加某种元数据,以便图库识别它们?

Nem*_*sis 31

好吧,我最终找到了答案.

原来是我怀疑的.保存的图像需要添加一些元数据才能在图库中看到(至少在我的设备中).

这就是我做的:

OutputStream fOut = null;
    File file = new File(imagePath,"GE_"+ System.currentTimeMillis() +".jpg");

    try {
        fOut = new FileOutputStream(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    try {
        fOut.flush();
        fOut.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    ContentValues values = new ContentValues();
    values.put(Images.Media.TITLE, this.getString(R.string.picture_title));
    values.put(Images.Media.DESCRIPTION, this.getString(R.string.picture_description));
    values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis ());
    values.put(Images.ImageColumns.BUCKET_ID, file.toString().toLowerCase(Locale.US).hashCode());
    values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, file.getName().toLowerCase(Locale.US));
    values.put("_data", file.getAbsolutePath());

    ContentResolver cr = getContentResolver();
    cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Run Code Online (Sandbox Code Playgroud)