¡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.
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);
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();
}
}
});
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;
}
- 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);
}
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
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());
}
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);
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);
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.
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>
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>
Top comments (0)