2012-12-27 14 views
16

Sto usando questo codice per salvare bitmap in External Storage, ma non crea la cartella se non esiste:Salva bitmap in Android come JPEG External Storage in una cartella

String path = Environment.getExternalStorageDirectory().toString(); 
     OutputStream fOutputStream = null; 
     File file = new File(path + "/Captures/", "screen.jpg"); 
     try { 
      fOutputStream = new FileOutputStream(file); 

      capturedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOutputStream); 

      fOutputStream.flush(); 
      fOutputStream.close(); 

      MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName()); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      Toast.makeText(this, "Save Failed", Toast.LENGTH_SHORT).show(); 
      return; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Toast.makeText(this, "Save Failed", Toast.LENGTH_SHORT).show(); 
      return; 
     } 

Come posso salvare il l'immagine nella nuova directory se non esiste e salva il valore predefinito se la cartella è presente nel dispositivo?

+0

file.getParentFile(). Mkdirs() – njzk2

+0

vedere come farlo in AsyncTask http://stackoverflow.com/a/29795857/3496570 – Nepster

risposta

26

provare questo lo farà dà u risultato sicuro:

String root = Environment.getExternalStorageDirectory().toString(); 
File myDir = new File(root + "/req_images"); 
myDir.mkdirs(); 
Random generator = new Random(); 
int n = 10000; 
n = generator.nextInt(n); 
String fname = "Image-" + n + ".jpg"; 
File file = new File(myDir, fname); 
Log.i(TAG, "" + file); 
if (file.exists()) 
    file.delete(); 
try { 
    FileOutputStream out = new FileOutputStream(file); 
    bm.compress(Bitmap.CompressFormat.JPEG, 90, out); 
    out.flush(); 
    out.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

aggiungi questo da mostrare nella galleria:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

look a questo link per una risposta chiara: show folder images in gallery

+0

Il codice ha funzionato per me, ma la cartella e le immagini non vengono visualizzati nella galleria dei dispositivi. Hai qualche idea? –

+1

mostrerà nel tuo dispositivo, ma se vuoi mostrare in galleria basta fare questa cosa ... –

2

Usa la seguente:

File dir = new File(path + "/Captures/"); 
if(!dir.exists()) { 
    dir.mkdirs(); 
} 
File file = new File(path + "/Captures/", "screen.jpg"); 
...... 
9

Si prega di utilizzare il frammento di codice di seguito potrebbero essere aiutare piena

String path = Environment.getExternalStorageDirectory().toString(); 
    OutputStream fOutputStream = null; 
    File file = new File(path + "/Captures/", "screen.jpg"); 
    if (!file.exists()) { 
     file.mkdirs(); 
    } 

    try { 
     fOutputStream = new FileOutputStream(file); 

     capturedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOutputStream); 

     fOutputStream.flush(); 
     fOutputStream.close(); 

     MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName()); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     Toast.makeText(this, "Save Failed", Toast.LENGTH_SHORT).show(); 
     return; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Toast.makeText(this, "Save Failed", Toast.LENGTH_SHORT).show(); 
     return; 
    } 
1

in ritardo ma potrebbe essere utile a qualcuno. usa sotto il codice che salverà la bitmap nella directory esterna più velocemente a causa di BufferOutPutStream.

public boolean storeImage(Bitmap imageData, String filename) { 
      // get path to external storage (SD card) 

      File sdIconStorageDir = null; 


      sdIconStorageDir = new File(Environment.getExternalStorageDirectory() 
        .getAbsolutePath() + "/myAppDir/"); 
      // create storage directories, if they don't exist 
if(!sdIconStorageDir.exist()) 
{ 
sdIconStorageDir.mkdirs(); 
}    
      try { 
       String filePath = sdIconStorageDir.toString() + File.separator + filename; 
       FileOutputStream fileOutputStream = new FileOutputStream(filePath); 
       BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); 
       //Toast.makeText(m_cont, "Image Saved at----" + filePath, Toast.LENGTH_LONG).show(); 
       // choose another format if PNG doesn't suit you 
       imageData.compress(Bitmap.CompressFormat.PNG, 100, bos); 
       bos.flush(); 
       bos.close(); 


      } catch (FileNotFoundException e) { 
       Log.w("TAG", "Error saving image file: " + e.getMessage()); 
       return false; 
      } catch (IOException e) { 
       Log.w("TAG", "Error saving image file: " + e.getMessage()); 
       return false; 
      } 
      return true; 
     }