我想实现在Downloads目录中保存图像的功能,然后提供给用户在目录中打开这个功能(用户可以在其中找到并打开此图像的打开目录)。但我有一个问题。保存成功结束,但当用户点击小吃栏中的“打开”并选择应用程序执行此操作时,会出现另一个目录。它还包含“下载”目录,此下载目录不包含已保存的图像!好像在android中我们有两个不同的“下载”目录。
以下是我如何获得保存图片的路径:
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();
}
答案 0 :(得分:0)
我通过使用Intent.ACTION_VIEW而不是Intent.ACTION_GET_CONTENT和&#34;来部分解决我的问题。 / &#34; mime类型而不是&#34; image / png&#34;。但只是部分原因,因为在这种情况下,用户可以选择广泛的应用程序,但不仅仅是文件管理器等应用程序。
答案 1 :(得分:0)
保存后使用MediaScannerConnection.scanFile
扫描文件。如果你没有多少/大多数画廊不会显示你的文件。
https://developer.android.com/reference/android/media/MediaScannerConnection.html