Как работают com.android.providers.downloads и com.android.providers.documents

com.android.providers.downloads — это системный провайдер загрузок (DownloadProvider), который управляет скачанными файлами и их метаданными; com.android.providers.documents — DocumentsProvider, обеспечивающий доступ к файлам через Storage Access Framework (SAF). Вместе они дают приложениям безопасный, контролируемый доступ к файлам без прямого доступа к файловой системе.

Зачем нужны эти провайдеры

Они служат посредниками между приложениями и хранилищем:

  • Безопасность: контролируют права чтения/записи и выдают URI вместо прямых путей.
  • Унификация: позволяют работать с локальными файлами, SD-картой и облачными провайдерами одинаково.
  • Служебные функции: регистрируют загрузки, показывают прогресс, управляют уведомлениями и сроком хранения временных файлов.

Если их удалить или отключить, многие приложения потеряют доступ к "Загрузкам" и не смогут открывать или сохранять файлы корректно.

Не удаляйте или не деактивируйте com.android.providers.downloads и com.android.providers.documents. Восстановление может потребовать сброса к заводским настройкам или прошивки.

Как работает com.android.providers.downloads

DownloadProvider интегрируется с DownloadManager и браузерами:

  • Создаёт и возвращает content:// URI для скачанных файлов (обычно в /storage/emulated/0/Download).
  • Ведёт базу метаданных: имя, размер, статус (в процессе, завершено, ошибка).
  • Управляет уведомлениями и очисткой временных данных (политика по умолчанию — удаление временных файлов через определённый срок). Практический пример: при скачивании APK провайдер сохраняет файл, регистрирует запись в таблице Downloads и уведомляет систему об окончании загрузки.

Как работает com.android.providers.documents

DocumentsProvider реализует DocumentsContract и SAF:

  • Открывает диалоги выбора файлов (ACTION_OPEN_DOCUMENT) и выдаёт URI доступа.
  • Поддерживает persistent URI и токены доступа, которые можно отозвать в любой момент.
  • Интегрируется с облачными провайдерами и адаптирует доступ к SD-карте и внутренним папкам. Это позволяет приложению получить доступ только к выбранным файлам, не видя остальной структуры /Android/data или приватных директорий.

Сравнение возможностей

ПровайдерОсновная задачаТипы данныхТребуемые API
com.android.providers.downloadsУправление загрузками, метаданныеЗагрузки (APK, ZIP, медиа)DownloadManager
com.android.providers.documentsУнифицированный доступ к файлам через SAFЛюбые файлы/папки, облако, SDStorage Access Framework (DocumentsContract)

Что делать при ошибках и простые шаги восстановления

Если появляется ошибка «Download provider не отвечает» или «Нет доступа к документам»:

  1. Проверьте: Настройки → Приложения → Показать системные → найдите оба пакета и убедитесь, что они включены и не ограничены в правах.
  2. Очистите кэш и данные провайдера:
    • Через UI: Настройки → Приложения → Хранилище → Очистить данные/кеш.
    • Через ADB: adb shell pm clear com.android.providers.downloads
  3. Перезапустите устройство.
  4. Если проблема возникла после обновления системы — установите последние обновления (Google Play Services, системные апдейты).
  5. Для кастомных прошивок проверьте наличие пакетов в /system/priv-app и корректные разрешения SELinux.

Если вы разработчик, используйте DocumentsContract и persistable URI (takePersistableUriPermission) вместо прямых файловых путей — это уменьшает проблемы с разрешениями и Scoped Storage.

Частые ошибки

  • Отключённый системный пакет. Решение: включить в настройках.
  • Потеря прав на persistent URI после удаления данных приложения. Решение: повторно выбрать файл через SAF.
  • Повреждённая база Downloads. Решение: очистка данных провайдера или восстановление из бэкапа.
  • На кастомных ROM отсутствует провайдер. Решение: установить нужный apk в /system/priv-app или прошить совместимый пакет.

FAQ

  • Что произойдёт, если удалить com.android.providers.downloads?
    Большинство приложений перестанут отображать и управлять скачанными файлами; операции загрузки могут завершаться ошибкой.

  • Можно ли заменить DocumentsProvider сторонним?
    Можно установить альтернативный DocumentsProvider, но он должен корректно реализовать SAF и иметь привилегии системы для доступа к некоторым хранилищам.

  • Как дать приложению постоянный доступ к папке на SD?
    Через диалог SAF выберите папку и сохраните persistent URI — приложение сможет работать с ней до отзыва разрешений.

Заключение: com.android.providers.downloads и com.android.providers.documents — ключевые компоненты файловой экосистемы Android. Правильная работа этих провайдеров обеспечивает безопасность, совместимость и предсказуемое поведение приложений при работе с файлами. Обращайтесь с ними осторожно и используйте стандартные API при разработке.