web-dev-qa-db-ja.com

Androidギャラリーに表示するアプリ画像フォルダーを作成する方法

ユーザーが画像を作成し、それを保存して、デフォルトのギャラリーアプリケーションから表示されるようにするアプリがあります。

カメラから撮影した写真と同じフォルダーに写真を保存したくないので、whatsappやfacebookなどのアプリの画像と同じように、アプリ専用のフォルダーに写真を保存したいと思います。

私はこれらの2つの場所にそれらを保存しようとしました:

File imagePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+ File.separator + appDirectoryName + File.separator);

そしてここ

File imagePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ File.separator + appDirectoryName + File.separator);

携帯電話で閲覧すると、画像は正常に保存されていますが、ギャラリーアプリに表示されません。何かが足りないのは明らかですが、それが何であるかわかりません。ギャラリーがそれらを認識するように、ファイルまたはフォルダーに何らかのメタデータを追加するのではないでしょうか。

12
Nemesis

さて、私は最終的に答えを見つけました。

それは私が疑ったものであることが判明しました。保存した画像をギャラリーで表示するには(少なくとも私のデバイスでは)、メタデータを追加する必要があります。

これは私がしたことです:

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);
31
Nemesis