DEV Community 👩‍💻👨‍💻

Cover image for Android Studio: almacenar foto en el dispositivo
Rodrigo Garcia Trejo
Rodrigo Garcia Trejo

Posted on

Android Studio: almacenar foto en el dispositivo

¡Hola devs!

Hoy les traigo un pequeño tutorial de Android Studio.

Como ya leyeron en el titulo explicare como almacenar una foto en android studio lo que haremos es una aplicación android que nos permita utilizar la cámara y guardar la foto tomada en una carpeta del propio dispositivo y mostrarla en un ImageView.

activity_main.xml

Nota: Este archivo en formato XML define el diseño de la interfaz de usuario (IU) de la actividad. Contiene un elemento TextView con el texto "Hello, World!"

Primero cambiaremos el ConstraintLayout por un LinearLayout con orientacion vertical y eliminamos el TextView que se genera automáticamente cuando se crea el proyecto y agregamos dos elementos un Button y un ImageView y definimos sus ids.

IMAGEN1

Los ids que se agregaron son:

  • btnCamara
  • ImageView1

Eso es todo lo que necesitamos realizar en la parte de diseño vamos a la parte de la lógica.

MainActivity

Nota: Esta es la actividad principal. Es el punto de entrada de tu app. Cuando compilas y ejecutas la app, el sistema inicia una instancia del elemento Activity y carga su diseño.

En el MainActivity (JAVA) comenzaremos creando 3 variables tipo Button, ImageView, String

  • Button btnCamara;
  • ImageView ImageView1;
  • String rutaImagen;

En el metodo onCreate asignaremos los elementos del xml a las variables con el metodo findViewById()

   btnCamara = findViewById(R.id.btnCamara);
   ImageView1 = findViewById(R.id.ImageView1);
Enter fullscreen mode Exit fullscreen mode

Asignamos a btnCamara al metodo setOnClickListener() y generar el código correspondiente dando ctrl + space el cual generará un metodo onClick, dentro de este agregaremos una funcion llamada abrirCamara(); que a continuación crearemos

        btnCamara.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    abrirCamara();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

Enter fullscreen mode Exit fullscreen mode

Antes de crear el método abrirCamara() crearemos otro llamado crearImagen() la cual nos permitirá generar una imagen con un nombre y formato especifico y el código es el siguiente:

crearImagen()

    private File crearImagen() throws IOException {

        String nombreImagen = "foto_";
        File directorio = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File imagen = File.createTempFile(nombreImagen, ".jpg", directorio);

        rutaImagen = imagen.getAbsolutePath();
        return imagen;

    }
Enter fullscreen mode Exit fullscreen mode
  • nombreImagen = "foto_" es un prefijo que se utilizara para las fotos generadas.
  • directorio tipo FIle permite obtener la ubicación del directorio de la carpeta de la aplicación.
  • imagen es la imagen ya generada con el prefijo foto_ y el formato .jpg
  • rutaImagen = es la ubicación de la imagen generada.

abrirCamara()

  private void abrirCamara() throws IOException {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        File imagenArchivo = null;

        try{
            imagenArchivo = crearImagen();

        }catch (IOException ex){
            Log.e("Error", ex.toString());
        }


        if(imagenArchivo != null)
        {
            Uri fotoUri = FileProvider.getUriForFile(this, "com.example.myapplication.fileprovider", imagenArchivo);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fotoUri);
        }

        startActivityForResult(intent, 1);

    }

Enter fullscreen mode Exit fullscreen mode
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Enter fullscreen mode Exit fullscreen mode

Con este intent lo que hacemos es abrir la cámara para tomar la foto.


try{
     imagenArchivo = crearImagen();

}catch (IOException ex){
     Log.e("Error", ex.toString());
}
Enter fullscreen mode Exit fullscreen mode

Con el método crearImagen() creamos la imagen y se la asignamos a imagenArchivo en caso de que se genere un error lo captamos con el catch

 if(imagenArchivo != null)
        {
            Uri fotoUri = FileProvider.getUriForFile(this, "com.example.myapplication.fileprovider", imagenArchivo);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fotoUri);
        }

        startActivityForResult(intent, 1);

Enter fullscreen mode Exit fullscreen mode

Si a imagen es diferente de null (osea, se genero la imagen correctamente) al intent generado previamente le asignamos la uri (la cual es la ubicación de la carpeta y el nombre del archivo) intent.putExtra(MediaStore.EXTRA_OUTPUT, fotoUri) e iniciamos la actividad

startActivityForResult(intent, 1);

onActivityResult

con el método onActivityResult() asignamos al ImageView1 la ruta de la imagen que se genero en crearImagen()

Nota: Los bitmap o mapa de bits son la estructura donde se almacenan los pixeles que conforman un gráfico, este esta represento como una rejilla rectangular de puntos de color denominada matriz.

Con esto terminamos todo el minitutorial.

Si deseas ver un video explicando todo esto, te invito a visitar el canal
Códigos de Programación - MR en youtube
Donde obtuve esta gran información.

Ver tutorial

Permisos en Manifest


 <uses-feature
        android:name="android.hardware.camera"
        android:required="true"></uses-feature>

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

Enter fullscreen mode Exit fullscreen mode

agregamos permisos para utilizar la camara y para escribir (Guardar archivos) y tambien agregamos un provider

   <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.example.myapplication.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

Enter fullscreen mode Exit fullscreen mode

Aquí encontrarán el codigo

!Listo, ya tenemos lista nuestra aplicación!

Top comments (0)

Timeless DEV post...

Git Concepts I Wish I Knew Years Ago

The most used technology by developers is not Javascript.

It's not Python or HTML.

It hardly even gets mentioned in interviews or listed as a pre-requisite for jobs.

I'm talking about Git and version control of course.

One does not simply learn git