Любой ContentProvider
обычно определяет тип данных, которые он обрабатывает (например, NotePadProvider обрабатывает Notes
тип данных, определенный во внутреннем классе NotePad ).MIME-тип - это просто стандартизированный способ определения этого типа данных путем присвоения ему уникального имени.Это позволяет передавать тип данных в код, который работает с ContentProvider
стандартным способом.
Это также помогает ContentProvider
, который обрабатывает несколько различных типов данных, чтобы упорядочить вещи, например RailwayContentProvider
может обрабатывать поезда, станции и билеты и может использовать MIME-тип для различения каждого из них.
Почему MIME-типы?
Использование MIME-типовЕстественное последствие, когда вы думаете о том, как к ContentProvider
получают доступ через URI, то есть что-то вроде URL в Интернете.Как и в Интернете, существуют типы MIME, такие как text/html
для веб-страниц и image/jpeg
для изображений .jpg, Android хочет, чтобы вы определяли пользовательский тип MIME для любого типа данных, который обрабатывает ContentProvider
.
Пример пользовательского типа MIME
В классе NotePad (ссылка выше) примера проекта NotePad вы найдете:
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.note";
Это поле определяет пользовательскийMIME-тип (распознается по шаблону type/subtype
).
Android предлагает использовать vnd.android.cursor.dir/...
в качестве первой части для любого вида «списка каталогов» (несколько элементов) и vnd.android.cursor.item/...
в качестве первой части длялюбой вид отдельного элемента.
Для подтипа снова предлагается начать его с vnd.
, а затем добавить что-то вроде обратного имени домена / имени пакета, например, vnd.android.cursor.item/vnd.com.mydomain.myapp.mydata
Toизбегайте всех этих vnd...
строк в вашем коде, есть также некоторые константы в ContentResolver
, такие как CURSOR_DIR_BASE_TYPE и CURSOR_ITEM_BASE_TYPE .