1. 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.
2. 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.
3. 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 }