Ответ 1
Структура поставщика контента Android имеет некоторые дополнительные преимущества по сравнению с непосредственным управлением данными.
Вы можете думать о строках "Где находится файл и кто может его удалить".
Сценарий 1
Файл находится на SD-карте (путь, доступный вашему приложению), и приложение удаляет его.
Решение:. Поскольку путь доступен для вас, java-подход будет работать с файлом Uri, как:
Файл://mnt/sdcard/downloads/image.jpeg
Сценарий 2
Файл находится в другом приложении (скажем, dropbox), и ваше приложение должно удалить файл.
Решение. Это означает, что файл фактически находится в частном хранилище другого приложения. Файл: Uri, указанный выше подход даст вам доступ запрещен. Таким образом, вашему приложению потребуется извлечь контент Uri из приложения, содержащего файл, и вызвать его поставщика контента для удаления.
fileUri = Uri.parse( "content://" + packageContainingTheFile "+ fileId);//заменим это на Uri, полученный из приложения. getContext(). getContentResolver(). delete (fileUri, null, null);
Сценарий 3
Файл находится в каталоге вашего приложения, т.е. в разделе data/data/com.yourpackage/yourfolder/yourfile.xxx, и ваше приложение удаляет его только.
Решение.. Здесь любой из указанных подходов будет работать, так как у вас есть доступ к удалению файла. Ури будет выглядеть так:
Файл://data/data/yourpackage/folder/file.ext
Основное преимущество использования провайдера контента заключается в том, что вы автоматически получаете модель наблюдателя. Обратные вызовы провайдера контента - это четко определенная точка входа, откуда данные изменяются. Следовательно, его желаемое место, чтобы уведомить других об изменениях, используя:
getContext(). getContentResolver(). notify (uri, null)
Предположим, что у вас есть представления, содержащие список таких файлов. Как только удаление будет выполнено, ваше уведомление может быть уведомлено.
Сценарий 4
Файл находится в каталоге вашего приложения, то есть в разделе data/data/com.yourpackage/yourfolder/yourfile.xxx, и вы хотите открыть функциональность удаления для других приложений.
Решение. Это похоже на Сценарий 1, просто наоборот. Другие приложения не могут удалить файл в вашем частном хранилище с помощью Uri, как
file://data/data/yourpackage/folder/file.ext//работает только для вашего приложения
Им нужно будет позвонить в ваш контент-провайдер, чтобы сделать это с помощью Uri.
Содержание://providerAuthority/удалить/идентификатор которые ваш контент-провайдер должен будет сопоставить с абсолютным путем file.ext.
Резюме
В заключение, использование провайдера контента необходимо, это некоторые сценарии, а необязательные в других. Это во многом зависит от ваших требований к приложениям. Если у вас есть представления, CursorLoaders на месте и вы хотите получать информацию об обновлениях или хотите вывести удаление ваших данных приложения в другие приложения, поставщик контента - самый чистый подход.