2011-12-01 15 views
12

hej Chcę uzyskać ostatnie zdjęcie zrobione przez użytkownika za pomocą dowolnej aplikacji kamery. Nie mam pojęcia, jak to zrobić:pobierz ostatnie zdjęcie zrobione przez użytkownika

Czy ktoś może mi pomóc?

dalej chcę wysłać ten obraz jako załącznik do wiadomości e-mail lub MMS ..

dzięki

+0

Wiem, że nie jest to dokładnie to, o co prosisz, ale może to jest coś więcej? Możesz rozpocząć działanie kamery i uzyskać obraz, który użytkownik bierze w wyniku. Zobacz tutaj http://stackoverflow.com/questions/2314958/using-the-camera-activity-in-android – Craigy

Odpowiedz

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);   
    } 
} 

wciąż pracuję na MMS wysyłanych część.

+0

Co to jest wartość za DATE_TAKEN? – blackjack

+2

@ blackack to MediaStore.Images.ImageColumns.DATE_TAKEN – jimmithy

+0

Zauważ, że to stało się już nieaktualne: 'managedQuery' jest przestarzałe od Honeycomb (Android 3.0). –

2

Zainspirowany https://stackoverflow.com/a/20065920/763459

Tak więc głównym problemem w tej odpowiedzi było nie wszystkie urządzenia są za pomocą „DCIM” jako folder aparatu. Następnie dowiedziałem się, że jeśli plik znajduje się w folderze określonym przez aplikację, zostanie zaindeksowany przez ContentResolver, ale druga aplikacja nie ma do niego dostępu, co oznacza canRead=false. Więc tutaj wymyślam inne rozwiązanie:

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; 
     } 
    } 
Powiązane problemy