2011-12-01 11 views
12

hey Quiero obtener la última foto capturada por el usuario a través de cualquier aplicación de cámara. No tengo ni idea de cómo hacer esoobtener la última foto tomada por el usuario

¿alguien me puede ayudar?

más quiero enviar esa imagen como un archivo adjunto a un correo electrónico o MMS ..

gracias

+0

Sé que esto no es exactamente lo que estás preguntando, pero tal vez es más lo que quieres decir? Puede iniciar la actividad de la cámara y obtener la imagen que el usuario toma como resultado. Consulte aquí http://stackoverflow.com/questions/2314958/using-the-camera-activity-in-android – Craigy

Respuesta

44
// Find the last picture 
String[] projection = new String[]{ 
    MediaStore.Images.ImageColumns._ID, 
    MediaStore.Images.ImageColumns.DATA, 
    MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME, 
    MediaStore.Images.ImageColumns.DATE_TAKEN, 
    MediaStore.Images.ImageColumns.MIME_TYPE 
    }; 
final Cursor cursor = getContext().getContentResolver() 
     .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, 
       null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC"); 

// Put it in the image view 
if (cursor.moveToFirst()) { 
    final ImageView imageView = (ImageView) findViewById(R.id.pictureView); 
    String imageLocation = cursor.getString(1); 
    File imageFile = new File(imageLocation); 
    if (imageFile.exists()) { // TODO: is there a better way to do this? 
     Bitmap bm = BitmapFactory.decodeFile(imageLocation); 
     imageView.setImageBitmap(bm);   
    } 
} 

Todavía estoy trabajando en el envío de MMS parte.

+0

¿Qué es el valor de DATE_TAKEN? – blackjack

+2

@blackjack es MediaStore.Images.ImageColumns.DATE_TAKEN – jimmithy

+0

Tenga en cuenta que esto se ha quedado obsoleto: 'managedQuery' ha quedado obsoleto desde Honeycomb (Android 3.0). –

2

Inspirado por https://stackoverflow.com/a/20065920/763459

Así que la principal preocupación de que la respuesta era no todos los dispositivos están utilizando "DCIM", como la carpeta de la cámara. Luego descubrí que si un archivo se encuentra dentro de una carpeta especificada por la aplicación, se indexará por ContentResolver, pero la otra aplicación no tendrá acceso a él, lo que significa canRead=false. Así que aquí se me ocurre otra solución:

while (cursor.moveToNext()) { 
     String imagePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA)); 
     File imageFile = new File(imagePath); 
     if (imageFile.canRead() && imageFile.exists()) { 
      // we have found the latest picture in the public folder, do whatever you want 
      break; 
     } 
    } 
Cuestiones relacionadas