Bienvenidos sean a este post, hoy veremos como eliminar las fotos agregadas con nuestro post anterior y tambien veremos como evitar errores ante fotos muy grandes sin mas preambulos procedamos con el caso.

Anuncios

Abramos MisLugares con Android Studio, ahora vamos a ir a nuestro archivo vista_lugar.xml y agregaremos un nuevo elemento, en este caso una imagen que utilizaremos como boton la cual ira junto a las imagenes vistas en el post anterior, veamos el codigo:

<ImageView
     android:layout_width="40dp"
     android:layout_height="40dp"
     android:contentDescription="@string/borrar_foto"
     android:src="@android:drawable/ic_menu_close_clear_cancel"
     android:onClick="eliminarFoto" />

Aca tendremos una imagen para visualizar junto a los iconos de camara y galeria visto en el post anterior, podran observar dos posibles errores, el primero en contentDescription y el segundo en el listener onClick pero ahora los solucionaremos a ambos pero antes veamos como queda el codigo final de nuestro archivo:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/scrollView1">
    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical">
        <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:id="@+id/nombre"
             android:layout_gravity="center_vertical"
             android:gravity="center"
             android:text="@string/vista_nombre"
             android:textAppearance="?android:attr/textAppearanceLarge" />
        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal">
            <ImageView
                 android:layout_width="40dp"
                 android:layout_height="40dp"
                 android:id="@+id/logo_tipo"
                 android:contentDescription="@string/vista_logo"
                 android:src="@drawable/otros" />
            <TextView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:id="@+id/tipo"
                 android:layout_gravity="center"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:text="@string/vista_lugar" />
        </LinearLayout>
        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:onClick="verMapa">
            <ImageView
                 android:src="@android:drawable/ic_menu_myplaces"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
            <TextView
                 android:id="@+id/direccion"
                 android:layout_gravity="center"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
        </LinearLayout>
        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:onClick="llamadaTelefono">
            <ImageView
                 android:src="@android:drawable/ic_menu_call"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
            <TextView
                 android:id="@+id/telefono"
                 android:layout_gravity="center"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
        </LinearLayout>
        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:onClick="paginaWeb">
            <ImageView
                 android:src="@android:drawable/ic_menu_mapmode"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
            <TextView
                 android:id="@+id/url"
                 android:layout_gravity="center"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
        </LinearLayout>
        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal">
            <ImageView
                 android:src="@android:drawable/ic_menu_info_details"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
            <TextView
                 android:id="@+id/comentario"
                 android:layout_gravity="center"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
        </LinearLayout>
        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal">
            <ImageView
                 android:src="@android:drawable/ic_menu_my_calendar"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
            <TextView
                 android:id="@+id/fecha"
                 android:layout_gravity="center"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
        </LinearLayout>
        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal">
            <ImageView
                 android:src="@android:drawable/ic_menu_recent_history"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
            <TextView
                 android:id="@+id/hora"
                 android:layout_gravity="center"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
        </LinearLayout>
        <RatingBar
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:id="@+id/valoracion"
             android:layout_gravity="center_horizontal"
             android:layout_toRightOf="@+id/foto"
             android:rating="3" />
        <FrameLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
            <ImageView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:id="@+id/foto"
                 android:adjustViewBounds="true"
                 android:contentDescription="@string/vista_foto"
                 android:src="@drawable/fondo_cerro"/>
            <LinearLayout
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="right">
                <ImageView
                     android:layout_width="40dp"
                     android:layout_height="40dp"
                     android:contentDescription="@string/borrar_foto"
                     android:src="@android:drawable/ic_menu_close_clear_cancel"
                     android:onClick="eliminarFoto" />
                <ImageView
                     android:layout_width="40dp"
                     android:layout_height="40dp"
                     android:contentDescription="@string/vista_camara"
                     android:src="@android:drawable/ic_menu_camera"
                     android:onClick="tomarFoto" />
                <ImageView
                     android:layout_width="40dp"
                     android:layout_height="40dp"
                     android:contentDescription="@string/vista_galeria"
                     android:src="@android:drawable/ic_menu_gallery"
                     android:onClick="galeria" />
            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
</ScrollView>
Anuncios

Como podran ver solamente se agrego el nuevo elemento al final para estar junto a los otros tres iconos, ahora procedamos a modificar los errores primero abramos el archivo strings.xml y agreguemos la siguiente linea:

<string name="borrar_foto">Eliminar foto</string>

Con este nueva linea ahora aparecera la descripcion en el icono, el codigo final de nuestro archivo es el siguiente::

<resources>
    <string name="app_name">Mis Lugares</string>
    <string name="menu_conf">Configuracion</string>
    <string name="menu_about">Acerca De...</string>
    <string name="menu_buscar">Buscar</string>
    <string name="vista_nombre">Nombre del Lugar</string>
    <string name="vista_lugar">Tipo del Lugar</string>
    <string name="vista_logo">Logo del tipo</string>
    <string name="vista_foto">Fotografia</string>
    <string name="vista_camara">Logo camara</string>
    <string name="vista_galeria">Logo galeria</string>
    <string name="menvst_compartir">Compartir</string> 
    <string name="menvst_llegar">Como llegar</string>
    <string name="menvst_editar">Editar</string>
    <string name="menvst_borrar">Borrar</string>
    <string name="menedt_guardar">Guardar</string>
    <string name="menedt_cancelar">Cancelar</string>
    <string name="borrar_foto">Eliminar foto</string>
</resources>

Una vez terminado esto vamos a agregar el metodo para poder controlar a nuestro boton, en este caso abramos la clase VistaLugar y agreguemos el siguiente metodo:

public void eliminarFoto(View view){
    new AlertDialog.Builder(this)
      .setTitle("Eliminacion de foto")
      .setMessage("Estas seguro?")
      .setPositiveButton("Aceptar", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int cualBoton) {
                lugar.setFoto(null);
                ponerFoto(imageview,null);
            }
        })
        .setNegativeButton("Cancelar",null)
        .show();
}

Como pueden ver agregamos un metodo de notificacion por medio de AlertDialog() para poder crear una notificacion y no borrarlo por error, como siempre el editor les sugerira a medida que vayan agregando el texto, les sugiero usarlo, despues simplemente lo modifican para que quede como se ve arriba, como pueden ver en el metodo onClick se encargara de seteat como nula (null) a la imagen por ende removiendola, y despues en el boton negativo no hara nada. Ahora veamos el codigo como queda finalmente:

package org.example.mislugares;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.io.File;
import java.text.DateFormat;
import java.util.Date;

public class VistaLugar extends AppCompatActivity {
    private long id;
    private Lugar lugar;
    private ImageView imageview;
    private Uri uriFoto;

    final static int RESULTADO_EDITAR = 1;
    final static int RESULTADO_GALERIA = 1;
    final static int RESULTADO_FOTO = 1;

    @Override
    protected void onCreate(Bundle savedInstancestate){
        super.onCreate(savedInstancestate);
        setContentView(R.layout.vista_lugar);
        Bundle extras = getIntent().getExtras();
        id = extras.getLong("id", -1);
        lugar = Lugares.elemento((int) id);
        imageview = (ImageView) findViewById(R.id.foto);
        actualizarVistas();
    }

    public void actualizarVistas(){
        TextView nombre = (TextView) findViewById(R.id.nombre);
        nombre.setText(lugar.getNombre());
        ImageView logo_tipo = (ImageView) findViewById(R.id.logo_tipo);
        logo_tipo.setImageResource(lugar.getTipo().getRecurso());
        TextView tipo = (TextView) findViewById(R.id.tipo);
        tipo.setText(lugar.getTipo().getTexto());
        TextView direccion = (TextView) findViewById(R.id.direccion);
        direccion.setText(lugar.getDireccion());
        TextView telefono = (TextView) findViewById(R.id.telefono);
        telefono.setText(Integer.toString(lugar.getTelefono()));
        TextView url = (TextView) findViewById(R.id.url);
        url.setText(lugar.getUrl());
        TextView comentario = (TextView) findViewById(R.id.comentario);
        comentario.setText(lugar.getComentario());
        TextView fecha = (TextView) findViewById(R.id.fecha);
        fecha.setText(DateFormat.getDateInstance().format(
                new Date(lugar.getFecha())));
        TextView hora = (TextView) findViewById(R.id.hora);
        hora.setText(DateFormat.getTimeInstance().format(
                new Date(lugar.getFecha())));
        RatingBar valoracion=(RatingBar) findViewById(R.id.valoracion);
        valoracion.setRating(lugar.getValoracion());
        valoracion.setOnRatingBarChangeListener(
                new RatingBar.OnRatingBarChangeListener() {
                    @Override
                    public void onRatingChanged(RatingBar ratingBar,
                                         float valor, boolean fromUser) {
                        lugar.setValoracion(valor);
                    }
                }
        );
        ponerFoto(imageview, lugar.getFoto());
    }

    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.menu_vista_lugar, menu);
        return true;
    }

    public void lanzarBorrar(){
        new AlertDialog.Builder(this)
                .setTitle("Borrado de lugar")
                .setMessage("Estas seguro de querer eliminar este lugar?")
                .setPositiveButton("Ok",
                        new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog,
                                        int cualBoton) {
                        Lugares.borrar((int) id);
                        finish();
                    }
                })
                .setNegativeButton("Cancelar", null)
                .show();
    }

    public void lanzarEditarLugar(View view){
        Intent i = new Intent(VistaLugar.this,
                EdicionLugar.class);
        i.putExtra("id", id);
        startActivityForResult(i,1234);
    }

    public void onActivityResult(int requestCode, int resultCode,
                                 Intent data){
        if (requestCode==1234){
            actualizarVistas();
            findViewById(R.id.scrollView1).invalidate();
        } else if (requestCode == RESULTADO_FOTO
                && resultCode == Activity.RESULT_OK
                && lugar!=null && uriFoto!=null ){
            lugar.setFoto(uriFoto.toString());
            ponerFoto(imageview,lugar.getFoto());
        } else if(requestCode == RESULTADO_GALERIA
                && resultCode == Activity.RESULT_OK){
            lugar.setFoto(data.getDataString());
            ponerFoto(imageview, lugar.getFoto());
        }
    }

    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
            case R.id.accion_compartir:
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT,
                        lugar.getNombre()+ " - " + lugar.getUrl());
                startActivity(intent);
                return true;

            case R.id.accion_llegar:
                verMapa(null);
                return true;

            case R.id.accion_borrar:
                lanzarBorrar();
                return true;

            case R.id.accion_editar:
                lanzarEditarLugar(null);
                return true;

            default:
                return super.onOptionsItemSelected(item);

        }
    }

    public void verMapa(View view){
        Uri uri;
        double lat = lugar.getPosicion().getLatitud();
        double lon = lugar.getPosicion().getLongitud();
        if (lat != 0 || lon != 0) {
            uri = Uri.parse("geo:" + lat + "," + lon);
        } else {
            uri = Uri.parse("geo:0,0?q=" + lugar.getDireccion());
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }

    public void llamadaTelefono(View view){
        startActivity(new Intent(Intent.ACTION_DIAL,
                Uri.parse("tel:" + lugar.getTelefono())));
    }

    public void paginaWeb(View view){
        startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse(lugar.getUrl())));
    }

    public void galeria(View view){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("image/*");
        startActivityForResult(intent, RESULTADO_GALERIA);
    }

    protected void ponerFoto(ImageView imageview, String uri){
        if (uri != null) {
            imageview.setImageURI(Uri.parse(uri));
        } else {
            imageview.setImageBitmap(null);
        }
    }

    public void tomarFoto(View view){
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        uriFoto = Uri.fromFile(new File(
                Environment.getExternalStorageDirectory() + File.separator
                + "img_" + (System.currentTimeMillis() / 1000) + ".jpg"));
        //uriFoto = Uri.fromFile(new File("/sdcard/prueba.jpg"));
        intent.putExtra(MediaStore.EXTRA_OUTPUT,uriFoto);
        startActivityForResult(intent,RESULTADO_FOTO);
    }

    public void eliminarFoto(View view){
        new AlertDialog.Builder(this)
            .setTitle("Eliminacion de foto")
            .setMessage("Estas seguro?")
            .setPositiveButton("Aceptar", 
                    new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int cualBoton){
                    lugar.setFoto(null);
                    ponerFoto(imageview,null);
                }
            })
            .setNegativeButton("Cancelar",null)
            .show();
    }
}
Anuncios

Ahora si podemos probar nuestra app donde tendremos una accion como se ve en el siguiente video

Como pueden ver en el video agregamos una imagen a nuestro lugar, luego lo eliminamos y vemos como nos consulta si queremos borrarlo o no?, si elegimos afirmativamente se eliminara a la misma. Ahora vamos a suponer un caso donde deberiamos subir una foto muy grande, mayor a 4 MP (MegaPixeles), y para mostrarlo aca nos ocuparia mucha memoria sin necesidad, para evitar esto se utiliza una clase llamada bitmapFactory la cual nos permite manipular las imagenes reduciendo las mismas para permitirnos tener una mejor optimizacion de memoria, las reducciones solo pueden ser potencia de dos (es decir, 2,4,8,16,etc) para poder entender un poco mejor vamos a modificar nuestra app MisLugares de la siguiente forma, primero abramos la clase VistaLugar y vamos a modificar la siguiente linea en el metodo ponerFoto():

imageview.setImageURI(Uri.parse(uri));

Lo modificaremos por esta:

imageview.setImageBitmap(reduceBitmap(this,uri,1024,1024));

Esta linea contiene un error pero pasaremos a solucionar generando el nuevo metodo reduceBitmap() dentro de la clase VistaLugar:

public static Bitmap reduceBitmap(Context contexto, String uri,
                                  int MaxAncho, int MaxAlto){
    try{
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(contexto.getContentResolver()
                .openInputStream(Uri.parse(uri)),null,options);
        options.inSampleSize = (int) Math.max(
                Math.ceil(options.outWidth / MaxAncho),
                Math.ceil(options.outHeight / MaxAlto));
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeStream(contexto.getContentResolver()
                .openInputStream(Uri.parse(uri)),null,options);
    }
    catch (FileNotFoundException e){
        Toast.makeText(contexto,"File Not Found",
                Toast.LENGTH_LONG).show();
        e.printStackTrace();
        return null;
    }
}

Como pueden ver este nuevo metodo, va a tener cuatros atributos: uno para el contexto, otro para el lugar del archivo, el maximo de ancho y el maximo de alto. Nuestra primera novedad es el metodo try, este es un metodo utilizado para detectar errores y poder manipularlo por medio del catch, como aparece mas adelante. Si bien es una explicacion muy simple eso es lo que tecnicamente hace, si quieren verlo con mas detalle les recomiendo este post, luego crearemos un objeto llamado options de la clase BitmapFactory, con inJustDecodeBounds le permitiremos modificarlo, con la opcion inSampleSize le modificaremos el tamaño, luego lo volveremos a cerrar para no modificarlo y por ultimo devolveremos los datos modificados de nuestra imagen. Fuera del try, tenemos un metodo catch y este servira para en caso de existir un error, en este caso el no encontrar el archivo, nos devuelva un mensaje de error en pantalla y tambien lo escriba en el log, retornando un valor null, veamos como queda el codigo final:

Anuncios
package org.example.mislugares;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

import java.io.File;
import java.io.FileNotFoundException;
import java.text.DateFormat;
import java.util.Date;

public class VistaLugar extends AppCompatActivity {
    private long id;
    private Lugar lugar;
    private ImageView imageview;
    private Uri uriFoto;

    final static int RESULTADO_EDITAR = 1;
    final static int RESULTADO_GALERIA = 1;
    final static int RESULTADO_FOTO = 1;

    @Override
    protected void onCreate(Bundle savedInstancestate){
        super.onCreate(savedInstancestate);
        setContentView(R.layout.vista_lugar);
        Bundle extras = getIntent().getExtras();
        id = extras.getLong("id", -1);
        lugar = Lugares.elemento((int) id);
        imageview = (ImageView) findViewById(R.id.foto);
        actualizarVistas();
    }

    public void actualizarVistas(){
        TextView nombre = (TextView) findViewById(R.id.nombre);
        nombre.setText(lugar.getNombre());
        ImageView logo_tipo = (ImageView) findViewById(R.id.logo_tipo);
        logo_tipo.setImageResource(lugar.getTipo().getRecurso());
        TextView tipo = (TextView) findViewById(R.id.tipo);
        tipo.setText(lugar.getTipo().getTexto());
        TextView direccion = (TextView) findViewById(R.id.direccion);
        direccion.setText(lugar.getDireccion());
        TextView telefono = (TextView) findViewById(R.id.telefono);
        telefono.setText(Integer.toString(lugar.getTelefono()));
        TextView url = (TextView) findViewById(R.id.url);
        url.setText(lugar.getUrl());
        TextView comentario = (TextView) findViewById(R.id.comentario);
        comentario.setText(lugar.getComentario());
        TextView fecha = (TextView) findViewById(R.id.fecha);
        fecha.setText(DateFormat.getDateInstance().format(
                new Date(lugar.getFecha())));
        TextView hora = (TextView) findViewById(R.id.hora);
        hora.setText(DateFormat.getTimeInstance().format(
                new Date(lugar.getFecha())));
        RatingBar valoracion=(RatingBar) findViewById(R.id.valoracion);
        valoracion.setRating(lugar.getValoracion());
        valoracion.setOnRatingBarChangeListener(
                new RatingBar.OnRatingBarChangeListener() {
                    @Override
                    public void onRatingChanged(RatingBar ratingBar,
                                           float valor, boolean fromUser) {
                        lugar.setValoracion(valor);
                    }
                }
        );
        ponerFoto(imageview, lugar.getFoto());
    }

    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.menu_vista_lugar, menu);
        return true;
    }

    public void lanzarBorrar(){
        new AlertDialog.Builder(this)
                .setTitle("Borrado de lugar")
                .setMessage("Estas seguro de querer eliminar este lugar?")
                .setPositiveButton("Ok",
                        new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog,
                                        int cualBoton) {
                        Lugares.borrar((int) id);
                        finish();
                    }
                })
                .setNegativeButton("Cancelar", null)
                .show();
    }

    public void lanzarEditarLugar(View view){
        Intent i = new Intent(VistaLugar.this,
                EdicionLugar.class);
        i.putExtra("id", id);
        startActivityForResult(i,1234);
    }

    public void onActivityResult(int requestCode, int resultCode,
                                 Intent data){
        if (requestCode==1234){
            actualizarVistas();
            findViewById(R.id.scrollView1).invalidate();
        } else if (requestCode == RESULTADO_FOTO
                && resultCode == Activity.RESULT_OK
                && lugar!=null && uriFoto!=null ){
            lugar.setFoto(uriFoto.toString());
            ponerFoto(imageview,lugar.getFoto());
        } else if(requestCode == RESULTADO_GALERIA
                && resultCode == Activity.RESULT_OK){
            lugar.setFoto(data.getDataString());
            ponerFoto(imageview, lugar.getFoto());
        }
    }

    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
            case R.id.accion_compartir:
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT,
                        lugar.getNombre()+ " - " + lugar.getUrl());
                startActivity(intent);
                return true;

            case R.id.accion_llegar:
                verMapa(null);
                return true;

            case R.id.accion_borrar:
                lanzarBorrar();
                return true;

            case R.id.accion_editar:
                lanzarEditarLugar(null);
                return true;

            default:
                return super.onOptionsItemSelected(item);

        }
    }

    public void verMapa(View view){
        Uri uri;
        double lat = lugar.getPosicion().getLatitud();
        double lon = lugar.getPosicion().getLongitud();
        if (lat != 0 || lon != 0) {
            uri = Uri.parse("geo:" + lat + "," + lon);
        } else {
            uri = Uri.parse("geo:0,0?q=" + lugar.getDireccion());
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }

    public void llamadaTelefono(View view){
        startActivity(new Intent(Intent.ACTION_DIAL,
                Uri.parse("tel:" + lugar.getTelefono())));
    }

    public void paginaWeb(View view){
        startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse(lugar.getUrl())));
    }

    public void galeria(View view){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("image/*");
        startActivityForResult(intent, RESULTADO_GALERIA);
    }

    protected void ponerFoto(ImageView imageview, String uri){
        if (uri != null) {
            imageview.setImageBitmap(reduceBitmap(this,uri,1024,1024));
        } else {
            imageview.setImageBitmap(null);
        }
    }

    public void tomarFoto(View view){
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        uriFoto = Uri.fromFile(new File(
                Environment.getExternalStorageDirectory() + File.separator
                + "img_" + (System.currentTimeMillis() / 1000) + ".jpg"));
        //uriFoto = Uri.fromFile(new File("/sdcard/prueba.jpg"));
        intent.putExtra(MediaStore.EXTRA_OUTPUT,uriFoto);
        startActivityForResult(intent,RESULTADO_FOTO);
    }

    public void eliminarFoto(View view){
        new AlertDialog.Builder(this)
            .setTitle("Eliminacion de foto")
            .setMessage("Estas seguro?")
            .setPositiveButton("Aceptar",
                    new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, 
                                    int cualBoton) {
                    lugar.setFoto(null);
                    ponerFoto(imageview,null);
                }
            })
            .setNegativeButton("Cancelar",null)
            .show();
    }

    public static Bitmap reduceBitmap(Context contexto, String uri,
                                      int MaxAncho, int MaxAlto){
        try{
            final BitmapFactory.Options options = 
                                          new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(contexto.getContentResolver()
                    .openInputStream(Uri.parse(uri)),null,options);
            options.inSampleSize = (int) Math.max(
                    Math.ceil(options.outWidth / MaxAncho),
                    Math.ceil(options.outHeight / MaxAlto));
            options.inJustDecodeBounds = false;
            return BitmapFactory.decodeStream(contexto.getContentResolver()
                    .openInputStream(Uri.parse(uri)),null,options);
        }
        catch (FileNotFoundException e){
            Toast.makeText(contexto,"File Not Found",
                    Toast.LENGTH_LONG).show();
            e.printStackTrace();
            return null;
        }
    }
}
Anuncios

En resumen, hoy hemos visto como agregar una nueva funciona para eliminar las fotos cargadas, como tener un mensaje de notificacion antes de eliminarla, como el metodo es muy similar (o igual) al utilizado en c++ para manejar errores, como limitar en caso de ser muy grandes y espero les sea util, sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00