0 votos

Hola que tal estoy tratando de guardar las fotos que tomo con mi dispositivo (un celular LG L70 con Android 4.4 KitKat) si logro conseguir tomar la foto lo que no logro es guardarla es en la microSD del dispositivo, solo crea la carpeta y la guarda dentro de la carpeta pero dentro del almacenamiento interno del dispositivo. Me he guiado de tutoriales y los he seguido minusiosamente los pasos que se indican pero nada mas no encuentro cual puede ser mi error, les pido de favor me orienten. Este es el codigo que estoy utilizando:
 

package com.jarp.tomafoto2;

import android.app.Activity;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Foto1 extends Activity {
      private File file = new File(Environment.getExternalStorageDirectory() + "/CheckList/");
       //private File Archivo = new File(Environment.getExternalFilesDir(Environment.DIRECTORY_PICTURES)+ "/misFotos/");
       private Button boton;
       Uri uri;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_foto1);
        
      
        boton = (Button) findViewById(R.id.btnTomaFoto);
        //Si no existe crea la carpeta donde se guardaran las fotos
        file.mkdirs();
        //accion para el boton
       boton.setOnClickListener(new View.OnClickListener() {
        
        @Override
         public void onClick(View v) {
        
          File mi_foto = new File( file,getCode() + ".jpg");
          try {
                       mi_foto.createNewFile();
                   } catch (IOException ex) {              
                    Log.e("ERROR ", "Error:" + ex);
                   }       
                   //
                    uri = Uri.fromFile(mi_foto);
               
                   Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
               
                   cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                   
                    
                   
               
                   startActivityForResult(cameraIntent, 1);
                   mensaje ();
                   
         }
        
        });
          }
    
    
  
    @SuppressLint("SimpleDateFormat")
    private String getCode()
    {
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
     String date = dateFormat.format(new Date() );
     String photoCode = "mimr_" + date;  
     return photoCode;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.foto1, menu);
     return true;
    }
    
    public void mensaje (){
         Toast toast = Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT);
         toast.show();   
    }
    }



 si necesitan algun dato mas para darme a entender mejor me lo hagan saber. Sin mas por el momento me despido en espera de su valiosa ayuda. Saludos Cordiales.

Nota en el AndroidManifest tengo estos permisos:
 

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

 

por en Android

1 Respuesta

0 votos

No veo problemas en el código, además tienes bien puesto el permiso de guardar en la memoria externa.

Podría ser que no estuviera detectando bien la memoria externa. Tienes que hacer las comprobaciones previas.

Te sugiero que pruebes el siguiente código:

byte[] data = //Fichero a guardar en formato byte[];    
String FICHERO = "Nombre_del_fichero.png";

File ruta = getExternalFilesDir(null);
File fichero = new File(ruta, FICHERO);

try {
	OutputStream os = new FileOutputStream(fichero);
	os.write(data);
	os.close();
} catch (IOException e) {
	Log.w("test", "Error al escribir " + fichero, e);
}

por
Hola Ramos, muchas gracias por tu respuesta,pero me surgio la duda de como utilizar la primera linea que me comentaste:

byte[] data = //Fichero a guardar en formato byte[];

Saludos!!

Me refiero a que convertir el fichero que sea a byte[].

Por ejemplo, para convertir un Bitmap a byte podemos hacer:

Bitmap imagen = //Cualquier imagen en formato Bitmap;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
imagen.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();