Ответ 1
Любой ContentProvider
обычно определяет тип данных, которые он обрабатывает (например, NotePadProvider обрабатывает тип данных Notes
определенный во внутреннем классе NotePad). MIME-тип - это просто стандартизированный способ определения этого типа данных путем присвоения ему уникального имени. Это позволяет передавать тип данных в код, который работает с ContentProvider
стандартным способом.
Это также помогает ContentProvider
который обрабатывает несколько различных типов данных, чтобы упорядочить вещи, например, RailwayContentProvider
может обрабатывать поезда, станции и билеты и может использовать тип MIME, чтобы отличать каждый из них.
Почему MIME типы?
Использование типов MIME является естественным следствием, когда вы думаете о том, как осуществляется доступ к ContentProvider
через URI, то есть что-то вроде URL-адреса в Интернете. Как и в Интернете, существуют типы MIME, такие как text/html
для веб-страниц и image/jpeg
для изображений .jpg, Android хочет, чтобы вы определяли пользовательский тип MIME для любого типа данных, ContentProvider
обрабатывает ваш 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
Чтобы избежать всех этих строк vnd...
в вашем коде, в ContentResolver
также есть некоторые константы, ContentResolver
как CURSOR_DIR_BASE_TYPE и CURSOR_ITEM_BASE_TYPE.