Tomar fotos con el sdk de Android

Twitter: @roboxito

Veremos el uso de la cámara, probado con el sdk de android 2.2 y 2.3.

toma foto

Comenzamos creando un nuevo proyecto, eliminamos la etiqueta por defecto del layout principal, en /res/layout/main.xml.

  • Agregamos un componente button y ajustamos sus propiedades Id: @+id/btnFoto, Layout height: 65dp, Text: Toma foto, Layout gravity: center.
  • Agregamos un componente ImageView, y cambiamos sus propiedades Id:@+id/imagen,Layout width: match_parent,Layout height: match parent, Src:@drawable/icon.
  • Nos cambiamos al código fuente, abriendo el archivo /src/com.androiddes/ TomafotoActivity.java,y declaramos variables auxiliares de la clase:

    private static int TAKE_PICTURE = 1;
    private static int maxSize=640;
    Intent intent;
    int code=TAKE_PICTURE ;
    ImageView iv ;
    String nomarch;
  • Luego agregamos código al evento OnCreate;

    Button btnAction=(Button) findViewById(R.id.btnFoto);
    //Configuramos la llamada al activity del systema con la cámara
    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    iv = (ImageView)findViewById(R.id.imagen);
    nomarch = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/tomafoto.jpg";
    btnAction.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Uri output = Uri.fromFile(new File(nomarch));
    //le decimos en que archivo guardara la imagen
    intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
    //lanzamos la cámara y esperamos los resultados
    startActivityForResult(intent, code);
    }
    });
  • Agregamos el método MuestraFoto() para tener la foto recién tomada,en la
    pantalla

    //creamos un método para mostrar fotos del SD card,en pantalla
    private void MuestraFoto(String arch) {
    try {
    BitmapFactory.Options op=new BitmapFactory.Options();
    op.inJustDecodeBounds=true;
    int scale = 1;
    FileInputStream fd=new FileInputStream(arch);
    //abrimos el archivo sin reservar memoria
    BitmapFactory.decodeFileDescriptor(fd.getFD(),null,op);
    //cambiamos el tamaño de la imagen, a una pequeña para
    //no desperdiciar memoria y que se vea bien.
    if (op.outHeight > maxSize || op.outWidth > maxSize) {
    double d = Math.pow(2, (int) Math.round(Math.log(maxSize / (double) Math.max(op.outHeight, op.outWidth)) / Math.log(0.5)));
    scale = (int) d;
    }
    op=new BitmapFactory.Options();
    op.inSampleSize=scale;
    iv.setImageBitmap(BitmapFactory.decodeFileDescriptor(fd.getFD(),null,op));
    } catch(Exception e) {
    Toast.makeText(this, e.toString(), Toast.LENGTH_LONG);
    }
    }
  • Y finalmente, agregamos el evento onActivityResult() para recibir la respuesta de la llamada a la ventana de la cámara, y en caso de haber tomado una foto, la mostramos llamando al método MuestraFoto()

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode==TAKE_PICTURE) {
    //si logró tomar la foto,la mostramos
    MuestraFoto(nomarch);
    }
    }

El código fuente se encuentra aquí

Y el instalable .apk aquí

Happy Hacking

Comparte ➜

No comments

Add yours