ダウンロードディレクトリに画像を保存する機能を実装したいのですが、ユーザがこの画像を見つけて開くことができる)。しかし、私は1つの問題があります。保存は正常に終了しますが、ユーザーがスナックバーで「OPEN」をクリックしてこの操作を実行するアプリを選択すると、別のディレクトリが表示されます。これには「ダウンロード」ディレクトリも含まれていますが、このダウンロードディレクトリには保存された画像は含まれていません!アンドロイドのように、2つの異なる「ダウンロード」ディレクトリがあります。以下は"ダウンロード"ディレクトリに保存されたファイルが、アクティビティファイルを起動してこのフォルダを開いたときに表示されません。
私は、画像を保存するためのパスを取得する方法である:
private File getFileForImageSaving() {
String filename = getImageNameFromUrl(mImageUrl) + ".png";
File dest = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
filename);
int index = 1;
while (dest.exists()) {
filename = getImageNameFromUrl(mImageUrl) + "_" + index + ".png";
dest = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
filename);
index++;
}
return dest;
}
これは私がビュー「ダウンロード」ディレクトリと開いているファイルのための活動を実行する方法です。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri = Uri.parse(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath());
intent.setDataAndType(uri, "image/png");
startActivity(Intent.createChooser(intent, "Open folder"));
これは画像を保存する方法です。それは本当に働いている、私はチェックした。 PRI
vate void saveImageToFile() {
File dest = getFileForImageSaving();
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
FileOutputStream out = null;
try {
dest.createNewFile();
out = new FileOutputStream(dest);
Bitmap bitmap = Glide.with(ArticleImageViewActivity.this)
.load(mImageUrl)
.asBitmap()
.into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
Utils.showInSnackBar(
ArticleImageViewActivity.this, getString(R.string.image_has_been_successfully_saved),
Snackbar.LENGTH_LONG,
onOpenImageInDirectoryListener,
getString(R.string.open_image_in_directory));
} catch (Exception e) {
Utils.showInSnackBar(ArticleImageViewActivity.this,
getString(R.string.error_occurred_during_saving_image),
Snackbar.LENGTH_SHORT, null, null);
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}.execute();
}