2017-03-04 5 views
1

ダウンロードディレクトリに画像を保存する機能を実装したいのですが、ユーザがこの画像を見つけて開くことができる)。しかし、私は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(); 
    } 

答えて

0

私は部分的にIntent.ACTION_VIEW代わりのIntent.ACTION_GET_CONTENTと "/" MIMEタイプの代わりに、 "画像/ PNG" を使用して私の問題を解決します。しかし、このケースでは、ユーザーはファイルマネージャーのようなアプリケーションだけでなく、幅広いアプリケーションを選択するように提供されるため、部分的にしかありません。

関連する問題