2011-12-01 27 views
12

hey Tôi muốn có được ảnh cuối cùng được người dùng chụp qua bất kỳ ứng dụng máy ảnh nào. Tôi không biết làm cách nào để thực hiện điều đólấy ảnh cuối cùng được chụp bởi người dùng

bất kỳ ai có thể giúp tôi không?

hơn nữa tôi muốn gửi hình ảnh đó như một đính kèm vào email hoặc MMS ..

nhờ

+0

Tôi biết điều này không hoàn toàn là những gì bạn đang yêu cầu, nhưng có lẽ đó là ý nghĩa của bạn? Bạn có thể bắt đầu hoạt động máy ảnh và nhận được hình ảnh do người dùng thực hiện. Xem tại đây http://stackoverflow.com/questions/2314958/using-the-camera-activity-in-android – Craigy

Trả lời

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

tôi vẫn đang làm việc trên các MMS gửi phần.

+0

Giá trị cho DATE_TAKEN là gì? – blackjack

+2

@blackjack đó là MediaStore.Images.ImageColumns.DATE_TAKEN – jimmithy

+0

Lưu ý rằng điều này đã trở nên lỗi thời: 'managedQuery' đã không còn được dùng kể từ Honeycomb (Android 3.0). –

2

Lấy cảm hứng từ https://stackoverflow.com/a/20065920/763459

Vì vậy, mối quan tâm chính trong câu trả lời đó không phải là tất cả các thiết bị đang sử dụng "DCIM" như thư mục camera. Sau đó, tôi phát hiện ra rằng nếu một tập tin nằm bên trong một thư mục ứng dụng chỉ định, nó sẽ được lập chỉ mục bởi ContentResolver nhưng ứng dụng kia không có quyền truy cập vào nó, có nghĩa là canRead=false. Vì vậy, ở đây tôi đưa ra một giải pháp khác:

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; 
     } 
    } 
Các vấn đề liên quan