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:
InputStream is = context.getAssets().open(fileName);
OutputStream os = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator + fileName);
BufferedInputStream bis = new BufferedInputStream(is);
BufferedOutputStream bos = new BufferedOutputStream(os);
byte[] buf = new byte[1024];
int n = 0;
int o = 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
public class MainScreen extends Activity
{
private Button btnDownload;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnDownload=(Button)findViewById(R.id.SaveButton1);
btnDownload.setOnClickListener(
new Button.OnClickListener() {
@Override
public void onClick(View v) {
String newPicture = saveToSDCard(R.drawable.image1, "image1.jpg");
startMediaScanner(newPicture);
}
}
);
}
private String saveToSDCard(int resourceID, String finalName)
{
StringBuffer createdFile = new StringBuffer();
Bitmap resourceImage = BitmapFactory.decodeResource(this.getResources(), resourceID);
File externalStorageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), finalName);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
resourceImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
byte b[] = bytes.toByteArray();
try
{
externalStorageFile.createNewFile();
OutputStream filoutputStream = new FileOutputStream(externalStorageFile);
filoutputStream.write(b);
filoutputStream.flush();
filoutputStream.close();
createdFile.append(externalStorageFile.getAbsolutePath());
}
catch (IOException e)
{
}
return createdFile.toString();
}
private void startMediaScanner(String addedPicture)
{
sendBroadcast(new Intent(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"