2017-01-14 3 views
1

ちょっと、外部記憶装置に画像を保存したい。私はここから2つのバージョンを持っていますが、どちらも動作していません。目標は、ユーザーがボタンをクリックしてイメージが保存され、ユーザーがギャラリーでそのイメージを見ることができるということです。そこでここではバージョン1です:外部記憶装置に画像を保存

  String path = Environment.getExternalStorageDirectory().getPath(); 
      File outputDir= new File(path); 
      outputDir.mkdirs(); 
      File newFile = new File(path+"/"+"test.png"); 
      FileOutputStream out = null; 
      try { 
       out = new FileOutputStream(newFile); 
       mutableBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

そして、これはバージョン2です:

  String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "MyApplication"; 
      File outputDir= new File(path); 
      outputDir.mkdirs(); 
      File newFile = new File(path+"/"+"test.png"); 
      FileOutputStream out = null; 
      try { 
       out = new FileOutputStream(newFile); 
       mutableBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

+0

'Environment.getExternalStorageDirectory()'は既にフォルダです。それをリメイクする必要はありません。そうでないと、もっと似ています。 –

答えて

1

この

AsyncTask fileTask = new AsyncTask() { 
     @Override 
     protected Object doInBackground(Object[] objects) { 
File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "MyApplication"); 
if (!directory.exists()) { 
        directory.mkdirs(); 
       } 
Random generator = new Random(); 
int n = 10000; 
n = generator.nextInt(n); 
String name = " "+n+".jpg"; 
File pictureFile = new File(directory, name); 
pictureFile.createNewFile(); 
try { 
FileOutputStream out = new FileOutputStream(pictureFile); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.close(); 
} catch (Exception e) { 
     e.printStackTrace(); 
} 
return null; 
     } 
    }; 
    fileTask.execute(); 

を試してみてください助けてくれてありがとう。これは、罰金、すべてのファイルを提供動作するはずですあなたのアプリで取り扱いの許可を得ることができます。

また、メインスレッドでファイル操作を行うべきではないので、まだAsyncTaskを使用していない場合は常に使用してください。

+0

もFileNotFindExceptionを取得します:java.io.FileNotFoundException:/ storage/emulated/0 /saved_images/Image-7061.jpg:オープンに失敗しました:ENOENT(そのようなファイルやディレクトリはありません) – Luca486

+0

すべてのファイル処理権限を持っていますか?あなたがデバイスをテストしている場合は、ユーザーからの明示的な許可はmarshmallow以上ですか? –

+0

WRITE_EXTERNAL_STORAGE権限のみが付与されています。デバイスはAndroid Marshmallow 6.0.1です。別の権限が必要ですか? – Luca486

関連する問題