Usuario:ManuelRomero/Android
De WikiEducator
< Usuario:ManuelRomero
Revisión a fecha de 01:20 13 feb 2014; ManuelRomero (Discusión | contribuciones)
Desarrollo de aplicaciones con 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); } // }