Список всех изображений камеры в Android

Как получить список всех изображений с камер Android-устройства?

Это через Медиастор? Как?


person hpique    schedule 19.12.2010    source источник
comment
Это может помочь вам groups.google.com/group/android-developers/ browse_thread/поток/   -  person ninjasense    schedule 20.12.2010


Ответы (1)


Приложение "Галерея" получает изображения с камеры с помощью преобразователя контента по Images.Media.EXTERNAL_CONTENT_URI и отфильтровать результаты по Media.BUCKET_ID. Идентификатор корзины определяется следующим кодом:

public static final String CAMERA_IMAGE_BUCKET_NAME =
        Environment.getExternalStorageDirectory().toString()
        + "/DCIM/Camera";
public static final String CAMERA_IMAGE_BUCKET_ID =
        getBucketId(CAMERA_IMAGE_BUCKET_NAME);

/**
 * Matches code in MediaProvider.computeBucketValues. Should be a common
 * function.
 */
public static String getBucketId(String path) {
    return String.valueOf(path.toLowerCase().hashCode());
}

Исходя из этого, вот фрагмент, чтобы получить все изображения с камеры:

public static List<String> getCameraImages(Context context) {
    final String[] projection = { MediaStore.Images.Media.DATA };
    final String selection = MediaStore.Images.Media.BUCKET_ID + " = ?";
    final String[] selectionArgs = { CAMERA_IMAGE_BUCKET_ID };
    final Cursor cursor = context.getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, 
            projection, 
            selection, 
            selectionArgs, 
            null);
    ArrayList<String> result = new ArrayList<String>(cursor.getCount());
    if (cursor.moveToFirst()) {
        final int dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        do {
            final String data = cursor.getString(dataColumn);
            result.add(data);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return result;
}

Для получения дополнительной информации просмотрите классы ImageManager и ImageList в исходном коде приложения Галерея.

person hpique    schedule 21.12.2010
comment
Не все устройства сохраняют снятые изображения/видео в /DCIM/Camera. HTC Desire HD, например, сохраняет в /DCIM/100MEDIA. - person AlikElzin-kilaka; 10.07.2011
comment
И мы должны ненавидеть HTC Desire HD за это. - person hpique; 10.07.2011
comment
Однако вы можете просто перечислить все файлы, используя File api вместо использования курсоров БД. - person AlikElzin-kilaka; 11.07.2011
comment
Не могли бы вы объяснить, как получить исходный путь к изображению из большого пальца? В этой строке: final String data = cursor.getString(dataColumn); вы получаете путь к миниатюре изображения. Мне нужно в моем приложении отображать миниатюру изображения (быстрее) и сохранять копию изображения, используемого для создания этой миниатюры. - person Zelter Ady; 24.04.2012
comment
@hpique Не только устройства HTC имеют разные строки CAMERA_IMAGE_BUCKET_NAME. Например, My Jelly Bean Galaxy Nexus возвращает только камеру. - person Matthew; 07.05.2013
comment
упомянутые ссылки битые - person Dakait; 24.04.2014
comment
@dakait Ссылки удалены. Я не знаю, где сейчас находится исходный код Галереи. Есть идеи? - person hpique; 24.04.2014
comment
нет, быстрый поиск мог их найти :) если вы имеете в виду приложение стоковой галереи, я думаю, что оно должно быть где-то github.com /андроид - person Dakait; 24.04.2014
comment
@dakait Согласно поиску на github, их там нет. - person hpique; 24.04.2014