ユーザーが画像を作成し、それを保存して、デフォルトのギャラリーアプリケーションから表示されるようにするアプリがあります。
カメラから撮影した写真と同じフォルダーに写真を保存したくないので、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);
携帯電話で閲覧すると、画像は正常に保存されていますが、ギャラリーアプリに表示されません。何かが足りないのは明らかですが、それが何であるかわかりません。ギャラリーがそれらを認識するように、ファイルまたはフォルダーに何らかのメタデータを追加するのではないでしょうか。
さて、私は最終的に答えを見つけました。
それは私が疑ったものであることが判明しました。保存した画像をギャラリーで表示するには(少なくとも私のデバイスでは)、メタデータを追加する必要があります。
これは私がしたことです:
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);