文件保存在“下载”目录中,但是当我们通过启动活动文件打开此文件夹时不会出现

时间:2017-03-04 19:10:15

标签: android

我想实现在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();
  }

2 个答案:

答案 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