Android saving file to external storage Android saving file to external storage android android

Android saving file to external storage


Use this function to save your bitmap in SD card

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

and add this in manifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

EDIT: By using this line you will be able to see saved images in the gallery view.

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

look at this link also http://rajareddypolam.wordpress.com/?p=3&preview=true


The code presented by RajaReddy no longer works for KitKat

This one does (2 changes):

private void saveImageToExternalStorage(Bitmap finalBitmap) {    String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();    File myDir = new File(root + "/saved_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);    if (file.exists())        file.delete();    try {        FileOutputStream out = new FileOutputStream(file);        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);        out.flush();        out.close();    }    catch (Exception e) {        e.printStackTrace();    }    // Tell the media scanner about the new file so that it is    // immediately available to the user.    MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null,            new MediaScannerConnection.OnScanCompletedListener() {                public void onScanCompleted(String path, Uri uri) {                    Log.i("ExternalStorage", "Scanned " + path + ":");                    Log.i("ExternalStorage", "-> uri=" + uri);                }    });}


Update 2018, SDK >= 23.

Now you should also check if the user has granted permission to external storage by using:

public boolean isStoragePermissionGranted() {    String TAG = "Storage Permission";    if (Build.VERSION.SDK_INT >= 23) {        if (this.checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)                == PackageManager.PERMISSION_GRANTED) {            Log.v(TAG, "Permission is granted");            return true;        } else {            Log.v(TAG, "Permission is revoked");            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);            return false;        }    }    else { //permission is automatically granted on sdk<23 upon installation        Log.v(TAG,"Permission is granted");        return true;    }}public void saveImageBitmap(Bitmap image_bitmap, String image_name) {    String root = Environment.getExternalStorageDirectory().toString();    if (isStoragePermissionGranted()) { // check or ask permission        File myDir = new File(root, "/saved_images");        if (!myDir.exists()) {            myDir.mkdirs();        }        String fname = "Image-" + image_name + ".jpg";        File file = new File(myDir, fname);        if (file.exists()) {            file.delete();        }        try {            file.createNewFile(); // if file already exists will do nothing            FileOutputStream out = new FileOutputStream(file);            image_bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);            out.flush();            out.close();        } catch (Exception e) {            e.printStackTrace();        }        MediaScannerConnection.scanFile(this, new String[]{file.toString()}, new String[]{file.getName()}, null);    }}

and of course, add in the AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />