Skip to content Skip to sidebar Skip to footer

Android Dev Help: Saving An Image From Res/raw Or Asset Folder To The Sd Card

I am trying to save an image (jpg or png) from the res/raw or assets folder to the SD card location (/sdcard/DCIM/). I have been following a tutorial which can save an image from a

Solution 1:

InputStreamis= context.getAssets().open(fileName);
OutputStreamos=newFileOutputStream(Environment.getExternalStorageDirectory() + File.separator + fileName);

BufferedInputStreambis=newBufferedInputStream(is);
BufferedOutputStreambos=newBufferedOutputStream(os);
byte[] buf = newbyte[1024];

intn=0;
into=0;
while ((n = bis.read(buf, o, buf.length)) != 0) {
  bos.write(buf, 0, n);
}

bis.close();
bos.close();

Solution 2:

Tested and working code:

In order to copy image from resources (image1.png) to the image file in the Pictures directory (image1.jpg) on SD card you can try the following approach (android.permission.WRITE_EXTERNAL_STORAGE needed for saving image on the SD card). ACTION_MEDIA_SCANNER_SCAN_FILE broadcast has been sent in order to pass new picture to the media scanner, so it would be visible in the Media Gallery ASAP.

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import android.net.Uri;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.Button;
import android.os.Bundle;
import android.os.Environment;
import android.view.View

publicclassMainScreenextendsActivity 
{ 
    private Button btnDownload;
    /** Called when the activity is first created. */@OverridepublicvoidonCreate(Bundle savedInstanceState) 
    {         
        super.onCreate(savedInstanceState);         
        setContentView(R.layout.main);     
        btnDownload=(Button)findViewById(R.id.SaveButton1);

        btnDownload.setOnClickListener(
            newButton.OnClickListener() {
                @OverridepublicvoidonClick(View v) {
                    StringnewPicture= saveToSDCard(R.drawable.image1, "image1.jpg");
                    startMediaScanner(newPicture);
                }
            }
        );
    }

    private String saveToSDCard(int resourceID, String finalName)
    {
        StringBuffercreatedFile=newStringBuffer();

        BitmapresourceImage= BitmapFactory.decodeResource(this.getResources(), resourceID);       
        FileexternalStorageFile=newFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), finalName);
        ByteArrayOutputStreambytes=newByteArrayOutputStream(); 
        resourceImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        byte b[] = bytes.toByteArray(); 

        try 
        {
            externalStorageFile.createNewFile(); 
            OutputStreamfiloutputStream=newFileOutputStream(externalStorageFile); 
            filoutputStream.write(b); 
            filoutputStream.flush(); 
            filoutputStream.close();
            createdFile.append(externalStorageFile.getAbsolutePath());
        }
        catch (IOException e)
        {
        }

        return createdFile.toString();
    }

    privatevoidstartMediaScanner(String addedPicture)
    {
         sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+ addedPicture)));
    }
}

Post a Comment for "Android Dev Help: Saving An Image From Res/raw Or Asset Folder To The Sd Card"