Narendra Pal
Narendra Pal

Reputation: 6604

Captured image is not stored in the specific folder in android

I have created a program to capture the image and that is getting stored into sdcard/dcim/camera folder. Now I am trying to save the captured image in my own directory created in sdCard, say "/somedir".

I am able to make the directory programmatically but the image file is not getting stored in it.

Can anybody tell me where I am doing wrong here??

Here is the code....


File folder = new File(Environment.getExternalStorageDirectory() + "/abc");

Bitmap mybitmap1;     //mybitmap1 contain image. So plz dont consider that I don't have image in mybitmap1;
if(!folder.exists())
        {
            success = folder.mkdir();
            Log.i("Log", "folder created");
        }
        else
        {
            Log.i("Log", "Folder already present here!!");
        }
        String fname = date +".jpg";
        file = new File( folder,fname);
        if (file.exists ()) 
            file.delete (); 
        capturedImageUri = Uri.fromFile(file);

        FileOutputStream out;
            byte[] byteArray = stream.toByteArray();
            try {

                   out = new FileOutputStream(file);
                   mybitmap1.compress(Bitmap.CompressFormat.JPEG, 100, out);
                   out.flush();
                   out.close();
                   MediaStore.Images.Media.insertImage(getContentResolver(), mybitmap1, file.getName(), file.getName());
                   //MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());


            } catch (Exception e) {
                   e.printStackTrace();
            }

Upvotes: 0

Views: 2879

Answers (3)

Carsten Drösser
Carsten Drösser

Reputation: 496

Hers is what you need to do: instead of

File folder = new File(Environment.getExternalStorageDirectory() + "/abc");

do this

File folder = new File(Environment.getExternalStorageDirectory().getPath() + "/abc");
if(folder.exists()){
  //save your file then
}
else{
  folder.mkdirs();
  //save your file then
}

Make sure you use the neccessary permissions in your Manifest:

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

Upvotes: 0

Mohsin Naeem
Mohsin Naeem

Reputation: 12642

You are settings the wrong file name for the file. Just use this method if you want to use time in the name of image file.

private Uri getImageUri() {
    // Store image in dcim
    String currentDateTimeString = getDateTime();
    currentDateTimeString = removeChar(currentDateTimeString, '-');
    currentDateTimeString = removeChar(currentDateTimeString, '_');
    currentDateTimeString = removeChar(currentDateTimeString, ':');
    currentDateTimeString = currentDateTimeString.trim();
    File file = new File(Environment.getExternalStorageDirectory()
            + "/DCIM", currentDateTimeString + ".jpg");
    Uri imgUri = Uri.fromFile(file);

    return imgUri;
}


private final static String getDateTime() {
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd_hh:mm:ss");
    df.setTimeZone(TimeZone.getTimeZone("PST"));
    return df.format(new Date());
}

public static String removeChar(String s, char c) {
    StringBuffer r = new StringBuffer(s.length());
    r.setLength(s.length());
    int current = 0;
    for (int i = 0; i < s.length(); i++) {
        char cur = s.charAt(i);
        if (cur != c)
            r.setCharAt(current++, cur);
    }
    return r.toString();
}

Upvotes: 1

Nirali
Nirali

Reputation: 13805

Refer the below code

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK && requestCode == 1 ) {

    final Uri selectedImage = data.getData(); 

    try {
            bitmap = Media.getBitmap(getContentResolver(),selectedImage);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

            File f = new File(Environment.getExternalStorageDirectory()
                    + File.separator
                    + filename);
            f.createNewFile();
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       }
      }

Upvotes: 3

Related Questions