Как работают 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 | Любые файлы/папки, облако, SD | Storage Access Framework (DocumentsContract) |
Что делать при ошибках и простые шаги восстановления
Если появляется ошибка «Download provider не отвечает» или «Нет доступа к документам»:
- Проверьте: Настройки → Приложения → Показать системные → найдите оба пакета и убедитесь, что они включены и не ограничены в правах.
- Очистите кэш и данные провайдера:
- Через UI: Настройки → Приложения → Хранилище → Очистить данные/кеш.
- Через ADB: adb shell pm clear com.android.providers.downloads
- Перезапустите устройство.
- Если проблема возникла после обновления системы — установите последние обновления (Google Play Services, системные апдейты).
- Для кастомных прошивок проверьте наличие пакетов в /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 при разработке.