Guardar imagen de Android en la tarjeta SD

ACTUALIZAR

Adicional

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

Al manifiesto todo funciona bien ahora.

Ok, así que tengo una aplicación que he comenzado a crear que al final quiero ser capaz de tomar una foto, que luego te lleva a otra pantalla que le permite ser capaz de "Utilice" o "Retake" la imagen.

Cuando se toma la imagen que necesita para ser guardado en una nueva carpeta en la tarjeta SD, (si la carpeta no está allí, entonces tiene que crearlo). Tenía todo esto trabajando un par de semanas atrás, pero después de hacer algunos de edición y apagar eclipse no puedo parecer que volver a trabajar?

La sección para esto es después de int imageNum = 0; He añadido imagesFolder.mkdirs(); Que i belive es correcto para crear una nueva carpeta, pero incluso esto parece no estar funcionando ahora.

Ahora la imagen sólo se toma y ni la nueva carpeta se crea o la imagen se guarda.

 public class AndroidCamera extends Activity implements SurfaceHolder.Callback { Camera camera; SurfaceView surfaceView; SurfaceHolder surfaceHolder; boolean previewing = false; LayoutInflater controlInflater = null; final int RESULT_SAVEIMAGE = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); getWindow().setFormat(PixelFormat.UNKNOWN); surfaceView = (SurfaceView) findViewById(R.id.camerapreview); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); controlInflater = LayoutInflater.from(getBaseContext()); View viewControl = controlInflater.inflate(R.layout.control, null); LayoutParams layoutParamsControl = new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); this.addContentView(viewControl, layoutParamsControl); Button buttonTakePicture = (Button) findViewById(R.id.takepicture); buttonTakePicture.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub camera.takePicture(myShutterCallback, myPictureCallback_RAW, myPictureCallback_JPG); } }); } ShutterCallback myShutterCallback = new ShutterCallback() { public void onShutter() { // TODO Auto-generated method stub } }; PictureCallback myPictureCallback_RAW = new PictureCallback() { public void onPictureTaken(byte[] arg0, Camera arg1) { // TODO Auto-generated method stub } }; PictureCallback myPictureCallback_JPG = new PictureCallback(){ public void onPictureTaken(byte[] arg0, Camera arg1) { // TODO Auto-generated method stub /*Bitmap bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */ int imageNum = 0; Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); File imagesFolder = new File(Environment.getExternalStorageDirectory(), "BeatEmUp"); imagesFolder.mkdirs(); String fileName = "image_" + String.valueOf(imageNum) + ".jpg"; File output = new File(imagesFolder, fileName); while (output.exists()){ imageNum++; fileName = "image_" + String.valueOf(imageNum) + ".jpg"; output = new File(imagesFolder, fileName); } Uri uriSavedImage = Uri.fromFile(output); imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); OutputStream imageFileOS; try { imageFileOS = getContentResolver().openOutputStream(uriSavedImage); imageFileOS.write(arg0); imageFileOS.flush(); imageFileOS.close(); Toast.makeText(AndroidCamera.this, "Image saved: ", Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } camera.startPreview(); }}; public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub if (previewing) { camera.stopPreview(); previewing = false; } if (camera != null) { try { camera.setPreviewDisplay(surfaceHolder); camera.startPreview(); previewing = true; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub camera = Camera.open(); try { Camera.Parameters parameters = camera.getParameters(); if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { // This is an undocumented although widely known feature parameters.set("orientation", "portrait"); // For Android 2.2 and above camera.setDisplayOrientation(90); // Uncomment for Android 2.0 and above parameters.setRotation(90); } else { // This is an undocumented although widely known feature parameters.set("orientation", "landscape"); // For Android 2.2 and above camera.setDisplayOrientation(0); // Uncomment for Android 2.0 and above parameters.setRotation(0); } camera.setParameters(parameters); camera.setPreviewDisplay(holder); } catch (IOException exception) { camera.release(); } camera.startPreview(); } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub camera.stopPreview(); camera.release(); camera = null; previewing = false; } } 

Debe asegurarse de que el manifiesto indique el permiso para escribir en la tarjeta SD:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.