Usuario:ManuelRomero/Android

De WikiEducator
Saltar a: navegación, buscar



Desarrollo de aplicaciones con SDK de Android

Icon objectives.jpg

Objetivo

  1. Desarrollar aplicaciones para dispositivos móviles
  2. Usando el SDK de android


APP DE LA FOTO

package com.example.imagenes;
 
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
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.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
 
public class Imagenes extends Activity {
 
	Dialogo mensaje; 
	Intent intencion;
	String ubicacion;
	File carpeta;
	Uri img;
	File foto;
 
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
 
		// Creamos directorios si no existe para guardar nuestras imágenes
		carpeta = new File(Environment.getExternalStorageDirectory()+ File.separator + "Imagenes");
 
		if (!carpeta.exists())
			carpeta.mkdirs();
 
 
	}
 
 
 
    public void clickImagen(View v){
    	//Sacamos un DialogFragemen que me pregunta de donde quiero cargar la imagen
    	mensaje = new Dialogo();
    	mensaje.show(getFragmentManager(),"mensaje");
 
    }
 
    public void origenFoto(int opcion){
	    //Iniciamos la actividad foto
	     //DEFINO el intent
	     mensaje.dismiss();
	   	String nombreFoto = obtenerNombre()+".jpg";
    	foto = new File(carpeta.toString()+"/"+nombreFoto);
    	Log.i("FOTO)","Faile name xxxx = " + foto.toString());
 
	    ubicacion=foto.toString();
	    img = Uri.fromFile(foto);
	     switch (opcion){
 
	     case Constantes.ORIGEN_FOTO_CAMARA:
				if (hayBug){
					//no paso extras
					intencion =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
					startActivityForResult (intencion, Constantes.OK_FOTO);
				}else{
					intencion.putExtra(MediaStore.EXTRA_OUTPUT,img);
					intencion.putExtra("crop","true");
					startActivityForResult (intencion, Constantes.OK_FOTO);
 
				}
				intencion =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  				break;
			case Constantes.ORIGEN_FOTO_GALERIA:
				intencion.putExtra(MediaStore.EXTRA_OUTPUT,img);
				intencion.putExtra("crop","true");
				startActivityForResult (intencion, Constantes.OK_GALERIA);
				break;
		/*	case Constantes.MIS_FOTOS:
 
				Uri dir = Uri.parse(carpeta.toString());
				intencion =new Intent(Intent.ACTION_PICK,dir);
				break;
				*/
	     }
 
	  }
 
    //Método captado de http://stackoverflow.com/questions/1910608/android-action-image-capture-intent 
    //que evita un bug de android en determinadas versiones
 
    public boolean hasImageCaptureBug() {
 
        // list of known devices that have the bug
        ArrayList<String> devices = new ArrayList<String>();
        devices.add("android-devphone1/dream_devphone/dream");
        devices.add("generic/sdk/generic");
        devices.add("vodafone/vfpioneer/sapphire");
        devices.add("tmobile/kila/dream");
        devices.add("verizon/voles/sholes");
        devices.add("google_ion/google_ion/sapphire");
 
        return devices.contains(android.os.Build.BRAND + "/" + android.os.Build.PRODUCT + "/"
                + android.os.Build.DEVICE);
 
    }
 
    public void tomarFoto(){
    	//Preparamos el fichero donde queremos que se almacene
       	String nombreFoto = obtenerNombre()+".jpg";
    	foto = new File(carpeta.toString()+"/"+nombreFoto);
    	Log.i("FOTO)","Faile name xxxx = " + foto.toString());
 
	    ubicacion=foto.toString();
 
 
 
 
	    img = Uri.fromFile(foto);
	//Volvemos a usar la fución anterior para evitar el bug
		//Si no hay bug ponemos ya la ubicación de la foto
		if (hasImageCaptureBug()) {
			Log.i("FOTO","antes de intencion hay bug up");
		//	intencion.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 
		} else {
			intencion.putExtra(MediaStore.EXTRA_OUTPUT,img);
			intencion.putExtra("crop","true");
 
		    Log.i("FOTO","antes de intencion NOOO   bug up");
		}
 
		startActivityForResult(intencion , Constantes.OK_FOTO);
		Log.i("tomarFoto","vengo de tomar una foto");
		//Log.i("tomarFoto","imagen guardada en "+fileName);
 
 
 
	}
 
 
	private String obtenerNombre() {
		// TODO Auto-generated method stub
 
		SimpleDateFormat  fechaFormato = new SimpleDateFormat("yyyy_mm_dd_hh_mm_ss");  
		Date date = new Date();  
		String nombreFecha = fechaFormato.format(date);
		return nombreFecha;
	}
 
 
 
 
 
	protected void OnActivityResult(int respuesta, int resultado, Intent data) {
		// TODO Auto-generated method stub
		ImageView imagen = ((ImageView)findViewById(R.id.Imagen));
		super.onActivityResult(respuesta, resultado, data);
		Log.i("FOTO","Códigos devueltos: respuesta: "+respuesta+"Resultado: "+resultado);
		Bitmap foto;
 
 
 
		if (respuesta == Constantes.OK_FOTO){//Que la respuesta ha ido bien
			Log.i("FOTO","resultado de la foto OK");
			if (resultado==RESULT_OK) { //Que venimos del intent de hacer la foto
			Log.i("RESULTADO","Valor de la ubicacion de la foto "+ubicacion);
//Depende de donde hayamos guardado la foto la recogeremos, es decir si hay bug o no lo hay
			  if (hayBug()) {
				  Bitmap foto2 = (Bitmap) data.getParcelableExtra("data");
				    imagen.setImageBitmap(foto2);
			  }
				    else{
				    	Log.i("RESULTADO_FOTO","Foto ok en ubicacion "+ubicacion);
						  foto = BitmapFactory.decodeFile(ubicacion);
						  imagen.setImageBitmap(foto);
				    }
 
			  if (respuesta == Constantes.OK_GALERIA){
			    	Log.i("RESULTADO_FOTO","Foto ok en ubicacion "+ubicacion);
					  foto = BitmapFactory.decodeFile(ubicacion);
					  imagen.setImageBitmap(foto);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
					  -
				  /*
				  Uri u = data.getData();
				  Uri u2= Uri.fromFile(new File(ubicacion));
				  if (u==null)
					  Log.i("CROP","Dangggerrrr");
				  else 	
					  Log.i("CROP","Por aquí todo ok");
				  Log.i("FOTO","Voy a recortar la foto en la ubicacion "+ubicacion);
				  recorta(u,u2);
				  Log.i("FOTO","Vengo de recortar la foto");
				  */
 
				  //ImageView iv = (ImageView)findViewById(R.id.imgView);
				  Bitmap foto2 = (Bitmap) data.getParcelableExtra("data");
				    imagen.setImageBitmap(foto2);
 
				    Log.i("FOTO","voy a guardar la foto en "+ubicacion);
				    guardarImagenFichero (foto2,ubicacion);
			  }else{
				  Log.i("RESULTADO_FOTO","Foto ok en ubicacion "+ubicacion);
				  foto = BitmapFactory.decodeFile(ubicacion);
				  imagen.setImageBitmap(foto);
			  }
 
			//	Bitmap 
			//}
		}
		}
 
		if (respuesta == Constantes.OK_CROP){
			   Bundle extras = data.getExtras() 	;
			//get the cropped bitmap
			foto = extras.getParcelable("data");
			imagen.setImageBitmap(foto);
			}
 
		}
 
 
 
	private void guardarImagenFichero(Bitmap imagen, String ub){
 
		// Carpeta dónde guardamos la captura
		// En este caso, la raíz de la SD Card
		//File sd = Environment.getExternalStorageDirectory();
		File fichero = new File(ub);
 
		// El archivo que contendrá la captura
 
 
		try {
			if (fichero.exists()==false){
					fichero.createNewFile();
					Log.i("GUARDAR","Creado el fichero "+fichero.toString());
			}
				OutputStream os = new FileOutputStream(fichero);
				imagen.compress(Bitmap.CompressFormat.PNG, 90, os);
				os.close();
			}
	 catch (FileNotFoundException e) {
		 Log.i("GUADAR","Error de fichero");
		e.printStackTrace();
	} catch (IOException e) {
		Log.i("GUADAR","Error de fichero");
		e.printStackTrace();
	}
 
}
 
	private void recorta(Uri picUri, Uri salida) {
			        int aspectX = 2000;
			    int aspectY = 1200;
 
			        Intent intent = new Intent("com.android.camera.action.CROP");
			        intent.setType("image/*");
			        List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0 );
			        int size = list.size();
			        if (size == 0) {            
			            Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();
			            Log.i("CROP","NONONO se puede");
 
			            return;
			        } else {
			        	Log.i("CROP","SIIIIIP se puede");
			        intent.setDataAndType(picUri, "image/*");
			        intent.putExtra("scale", "true");
			        intent.putExtra("aspectX", aspectX);
			        intent.putExtra("aspectY", aspectY);
			        intent.putExtra("scaleUpIfNeeded", true);
			        intent.putExtra("return-data", false);
 
			        intent.putExtra(MediaStore.EXTRA_OUTPUT, salida);
 
			        startActivityForResult(intent, Constantes.OK_CROP);
			}
	}
 
 
 
 
 
	//Pillado en internet http://kartones.net/blogs/codefreak/archive/2012/03/31/android-tomando-fotos-rotando-fotos.aspx
 
	//Obetener el nombre del fichero a partir de la URI
	  public static String getRealPathFromURI(Uri contentUri, Activity activity) {
 
	        String[] proj = {
	            MediaStore.Images.Media.DATA
	        };
	        Cursor cursor = activity.managedQuery(contentUri, proj, null, null,
	                 null);
 
	        int column_index = cursor
	                 .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
	        cursor.moveToFirst();
	        return cursor.getString(column_index);
	    } 
 
 
 
	//
}