MediaStore в Android

MediaStore в Android — это API, которое предоставляет доступ к мультимедийным файлам (изображениям, видео, аудио), хранящимся на устройстве. Оно используется для работы с контентом, который сохраняется в хранилище устройства или внешней памяти. MediaStore позволяет приложениям запрашивать, добавлять, удалять и обновлять мультимедийные файлы с использованием разрешений и без прямого доступа к файловой системе.

Основные задачи MediaStore:

  1. Запрос мультимедийных файлов: с использованием курсоров можно получать доступ к изображениям, видео и аудиофайлам на устройстве.
  2. Добавление файлов в MediaStore: через ContentResolver можно добавлять новые записи мультимедиа.
  3. Удаление файлов: файлы можно удалять из хранилища.
  4. Обновление метаданных файлов.

Пример использования MediaStore для получения списка изображений:

val projection = arrayOf(
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME
)

val selection = null // Условие выбора (можно задать фильтрацию)
val selectionArgs = null // Аргументы для фильтрации
val sortOrder = "${MediaStore.Images.Media.DATE_ADDED} DESC" // Сортировка по дате добавления

val cursor = contentResolver.query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection,
    selection,
    selectionArgs,
    sortOrder
)

cursor?.use {
    val idColumn = it.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
    val nameColumn = it.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME)

    while (it.moveToNext()) {
        val id = it.getLong(idColumn)
        val name = it.getString(nameColumn)

        // Получаем URI изображения
        val contentUri = ContentUris.withAppendedId(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id
        )

        // Используем полученные данные (например, для отображения изображений)
        Log.d("MediaStoreExample", "Image ID: $id, Name: $name, URI: $contentUri")
    }
}

Объяснение:

  • projection: Указывает столбцы, которые мы хотим получить (ID и имя файла).
  • selection и selectionArgs: Используются для фильтрации результатов (в данном случае нет фильтрации).
  • sortOrder: Указывает, как сортировать данные (по дате добавления в порядке убывания).
  • cursor: Используется для итерации по результатам запроса.

Таким образом, с помощью MediaStore можно запросить список изображений, видео или аудио на устройстве, получать информацию о них, например, URI для последующего использования в приложении.