2010-12-23 46 views
5

Estoy haciendo un programa que toma una imagen y luego muestra su miniatura. Al usar el emulador, todo va bien y el botón de descarte borra la foto. Pero en un dispositivo real, la cámara intenta guardar la imagen en la variable imageUri y una segunda que se llama como si acabara de abrir la cámara y tomara una foto por sí misma.Cámara Android intento de crear dos archivos

private static final int CAMERA_PIC_REQUEST = 1337; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.camera); 

    //start camera 
    values = new ContentValues(); 
    values.put(MediaStore.Images.Media.TITLE, "New Picture"); 
    values.put(MediaStore.Images.Media.DESCRIPTION,"From your Camera"); 
    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
    image = (ImageView) findViewById(R.id.ImageView01); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
    startActivityForResult(intent, CAMERA_PIC_REQUEST); 


    //save the image buttons 
    Button save = (Button) findViewById(R.id.Button01); 
    Button close = (Button) findViewById(R.id.Button02); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) { 
     try{ 
      thumbnail = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
      image.setImageBitmap(thumbnail); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
    else{ 
     finish(); 
    } 
} 

public void myClickHandler(View view) { 
    switch (view.getId()) { 
    case R.id.Button01: 
     finish(); 
     break; 
    case R.id.Button02: 
     dicard(); 
    } 
} 

private void dicard(){ 
    getContentResolver().delete(imageUri, null, null); 
    finish(); 
} 
+0

Probé el programa en HTC Incredible y funciona muy bien. ¿Es este un problema conocido con los teléfonos LG ALLY? –

Respuesta

1

Algunos teléfonos Android almacenan la foto original en la galería, y una miniatura solo en su ubicación. No importa lo que hiciste con la solicitud original. Tengo dos teléfonos HTC diferentes haciéndolo, y un montón de otras marcas que no lo hacen.

Lo resolví de otra manera. Ejecuté una consulta de cada elemento en la galería y cargué los BucketID en una matriz. Lo hago cuando mi aplicación inicia la aplicación de la cámara. Cuando la aplicación de la cámara vuelve, realizo la misma consulta (con elementos recientemente agregados para ahorrar tiempo). Lo comparo con mi lista original y encuentro el nuevo BucketID. A continuación, comparo el tamaño de esta imagen con el archivo que establecí explícitamente como salida. Si es más grande, lo copio, reemplazando lo que tenía. Luego elimino el archivo y lo elimino de la galería.

¡Dolor en lo que usted sabe qué!

[EDIT] Tuve que cambiar esto nuevamente cuando descubrí un teléfono que no guardaba identificadores de cubos únicos ... Consulte mi publicación en el enlace que sigue a esta respuesta para obtener más información.

+0

Si publica esa respuesta en http://stackoverflow.com/questions/6390163/deleting-a-gallery-image-after-camera-intent-photo-taken con código de muestra, hay 500 puntos de recompensa para usted. –

+0

Lo actualizaré allí. – Paul

Cuestiones relacionadas