получить последний снимок, сделанный пользователем - PullRequest
14 голосов
/ 01 декабря 2011

эй, я хочу получить последний снимок, сделанный пользователем через любое приложение камеры.Я понятия не имею, как это сделать

Может ли кто-нибудь мне помочь?

Далее я хочу отправить это изображение в виде вложения в электронное письмо или MMS ..

спасибо

Ответы [ 2 ]

51 голосов
/ 19 декабря 2011
// 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);         
    }
} 

Я все еще работаю над отправкой MMS.

3 голосов
/ 18 марта 2016

Вдохновленный https://stackoverflow.com/a/20065920/763459

Таким образом, основной проблемой в этом ответе было то, что не все устройства используют «DCIM» в качестве папки камеры.Затем я обнаружил, что если файл находится в папке, указанной приложением, он будет проиндексирован ContentResolver, но другое приложение не имеет к нему доступа, что означает canRead=false.Итак, здесь я придумаю другое решение:

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