En este post realizaremos una aplicación android que hará uso de la cámara del celular para tomar una foto y guardarla en la sdcard del teléfono en el lugar que nosotros indiquemos y con el nombre que deseemos.
Necesitamos
– Eclipse Indigo + Android instalado
Nivel Java-Android: Intermedio
Tiempo: 15 minutos
1.Crea un nuevo Application Android Project con la siguiente configuración:
Application Name: Toma Foto
Project Name: TomaFoto
Package Name: com.bolivia.tomafoto
Activity: Blank Activity
Activity Name: MainActivity.java
Layout Name: activity_main.xml
2. Abre el archivo AndroidManifest.xml para añadir los permisos necesarios, estos son:
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Estos permisos te permiten manipular la cámara desde la aplicación y escribir en el sdcard.
3. Abre el archivo activity_main.xml, nuestra interfaz estará compuesta de un solo botón, el código XML es el siguiente:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/btnTomaFoto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="@string/strTomaFoto" /> </RelativeLayout>
Importante, el ID del botón es «btnTomaFoto«, no olvides también crear un string para el texto del botón.
4. Finalmente el código para tomar la foto, abre el archivo «MainActivity.java» y reemplaza por:
01 package com.bolivia.tomafoto; 02 import java.io.File; 03 import java.io.IOException; 04 import java.text.SimpleDateFormat; 05 import java.util.Date; 06 07 import android.net.Uri; 08 import android.os.Bundle; 09 import android.os.Environment; 10 import android.provider.MediaStore; 11 import android.annotation.SuppressLint; 12 import android.app.Activity; 13 import android.content.Intent; 14 import android.util.Log; 15 import android.view.Menu; 16 import android.view.View; 17 import android.widget.Button; 18 19 public class MainActivity extends Activity { 20 21 private final String ruta_fotos = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/misfotos/"; 22 private File file = new File(ruta_fotos); 23 private Button boton; 24 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.activity_main); 29 //======== codigo nuevo ======== 30 boton = (Button) findViewById(R.id.btnTomaFoto); 31 //Si no existe crea la carpeta donde se guardaran las fotos 32 file.mkdirs(); 33 //accion para el boton 34 boton.setOnClickListener(new View.OnClickListener() { 35 36 @Override 37 public void onClick(View v) { 38 String file = ruta_fotos + getCode() + ".jpg"; 39 File mi_foto = new File( file ); 40 try { 41 mi_foto.createNewFile(); 42 } catch (IOException ex) { 43 Log.e("ERROR ", "Error:" + ex); 44 } 45 // 46 Uri uri = Uri.fromFile( mi_foto ); 47 //Abre la camara para tomar la foto 48 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 49 //Guarda imagen 50 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 51 //Retorna a la actividad 52 startActivityForResult(cameraIntent, 0); 53 } 54 55 }); 56 //====== codigo nuevo:end ====== 57 } 58 59 /** 60 * Metodo privado que genera un codigo unico segun la hora y fecha del sistema 61 * @return photoCode 62 * */ 63 @SuppressLint("SimpleDateFormat") 64 private String getCode() 65 { 66 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss"); 67 String date = dateFormat.format(new Date() ); 68 String photoCode = "pic_" + date; 69 return photoCode; 70 } 71 72 @Override 73 public boolean onCreateOptionsMenu(Menu menu) { 74 // Inflate the menu; this adds items to the action bar if it is present. 75 getMenuInflater().inflate(R.menu.main, menu); 76 return true; 77 } 78 79 }
#21 se indica donde se almacenaran las fotos que se tomen, nuestra ruta es «sdcard/pictures/misfotos/»
#34..#55 en la acción del botón se añade el código para tomar la foto y guardar la foto, cuando se presione el botón, se abrirá la cámara del celular para tomar la foto, cuando esta acción se realice, se volverá a la aplicación.
#64 para guardar las fotos, se necesitan de un nombre único para eso se crea un método que hará uso de la hora y fecha del dispositivo para generar un código único «pic_yyyymmddhhmmss.jpg» que nos sirve de nombre de imagen
El resto del código esta comentado y es bastante cortito para que se pueda entender, ejecutamos la aplicación y ya podemos tomar fotos.
Proyecto android TOMA FOTO en este enlace pobre
enjoy! 🙂
En este post dejo el código fuente de un blog en PHP desarrollado siguiendo el patrón de diseño MVC (Modelo, Vista y Con[...]
Agregar una imagen a un jpanel o a un jframe no es complicado pero para un programador novato puede convertirse en todo[...]
De las pocas herramientas disponibles entre librerías, frameworks, engines, etc para el desarrollo de videojuegos en len[...]
¿Que es la facturación electrónica? Una factura es un documento que sirve para describir el costo de los servicios y des[...]
Slim es un micro framework para PHP que nos ayuda a escribir rápidamente aplicaciones Web y APIs sencillas pero poderosa[...]
Continuación del tutorial «Utiliza 2 bases de datos diferentes en una aplicación» La Interfaz frmSelected.java: Haciendo[...]