Главная » Разработка для Android » ОПРЕДЕЛЕНИЕ ОБЩЕДОСТУПНОГО API ПОСТАВЩИКА СОДЕРЖИМОГО в Android приложении

0

 

Мы уже говорили о том, как клиенты используют поставщики содержимого, здесь мы подробнее расскажем будущим авторам поставщиков содержимого о том, как полностью реализовать общедоступный интерфейс (API) такого поставщика. Чтобы клиенты могли использовать поставщик содержимого, необходимо создать общедоступный класс API, содержащий набор костант. Клиенты смогут применять эти константы для доступа к полям столбцов объектов Cursor, возвращаемых посредством метода запроса вашего поставщика. Кроме того, в этом классе будет определяться URI источника вашего поставщика содержимого, фактически – основа всей используемой в поставщике системы обмена информацией по URI. Наш класс FinchVideo. SimpleVideos предоставляет АРІ для класса SimpleFinchVideo.

Сначала мы объясним каждый компонент класса, в частности сообщим базовую информацию о его полях, а потом покажем его полный листинг.

Определение CONTENTJJRI

Чтобы клиентское приложение могло запрашивать данные у поставщика содержимого, оно должно передать URI, указывающий релевантные данные одному из методов преобразователя содержимого (content resolver). Эти методы относятся к преобразователю содержимого (content resolver) системы Android. Методы называются query, і nsert, update и del ete. После такой активизации преобразователь содержимого будет использовать строку источника (authority string) для сопоставления входящего URI с CONTENT_URI каждого известного ему поставщика содержимого, чтобы найти поставщик, подходящий для конкретного клиента. Итак, CONTENTJJRI определяет тип URI (уникального идентификатора ресурса), который может обработать ваш поставщик содержимого.

CONTENTJJRI состоит из следующих частей.

content: / / – префикс, сообщающий фреймворку Android о том, что необходимо найти поставщик содержимого для преобразования данного URI.

Источник (authority) – данная строка уникально идентифицирует поставщик содержимого и состоит из двух частей: организационной части и идентификатора поставщика. Организационная часть уникально идентифицирует ту организацию, которая создала поставщик содержимого. Идентификатор поставщика означает конкретный поставщик содержимого, созданный этой организацией. В поставщиках содержимого, встроенных в операционную систему Android, организационная часть опускается. Например, встроенный источник media, возвращающий одно или более изображений, не имеет организационной части. Напротив, любые поставщики содержимого, созданные разработчиками, не работающими в команде создателей Android, должны определять обе части этой строки. Таким образом, источник нашего простого видеоприложения Finch имеет вид com.oreilly.demo.pa.finchvideo.SimpleFinchVideo. Организационная часть – это com. oreilly. demo. pa. fіnchvideo, а идентификатор поставщика содержимого – SimpleFinchVideo. В документации Google упоминается, что оптимальное решение при написании источника в CONTENTJJRI – это полностью квалифицированное имя класса, реализующего поставщик содержимого.

Источник уникально идентифицирует конкретный поставщик содержимого. Android будет вызывать этот поставщик содержимого в ответ на получаемые запросы, которые приходится обрабатывать.

Путь – поставщику содержимого не обязательно интерпретировать остальную часть URI, но он должен подчиняться ряду требований.

• Если поставщик содержимого может возвращать данные нескольких типов, то URI должен быть составлен так, чтобы в определенной части пути был указан тин возвращаемых данных.

Например, встроенный в систему Android поставщик содержимого contacts может возвращать разнообразную информацию: имена людей, номера телефонов, способы связи и т. д. Поставщик содержимого, работающий с контактами, использует строки, которые входят в состав URI, для различения того, какой тип данных запрашивается пользователем. Например, при запросе определенного человека, отмеченного в списке контактов, уникальный идентификатор ресурса будет выглядеть примерно так:

content://contacts/people/l

При запросе определенного телефонного номера URI может выглядеть так:

content://contacts/people/l/phone/3

В первом случае MIME-тип возвращаемых данных будет vnd .android, cursor. item/ person, аво втором – vnd. android, cursor, і tern/phone.

• Поставщик содержимого должен быть способен вернуть как один элемент, так и множество идентификаторов элементов. Поставщик содержимого возвращает одиночный элемент, когда идентификатор элемента оказывается в последней части URI. Вспомнив наш предыдущий пример, отметим, что уникальный идентификатор ресурса content://contacts/people/l/phone/3 возвратил единственный телефонный номер типа vnd.android.cursor.item/ phone. Если бы мы имели дело с URI content://contacts/peoplе/1/phone, то приложение вернуло бы список всех телефонных номеров определенного человека – того, который имеет идентификационный номер 1, – a MIME-тип возвращаемых данных был бы vnd.android.cursor.dir/phone.

Как было указано выше, поставщики содержимого могут интерпретировать части пути уникального идентификатора ресурса таким образом, как это требуется им для работы. Это означает, что часть пути может использовать элементы, входящие в состав пути для того, чтобы фильтровать данные, возвращаемые , вызывающей стороне. Например, встроенный в систему поставщик содержимого medi а может возвращать как внешние, так и внутренние данные, в зависимости от того, содержится ли в уникальном идентификаторе ресурса слово external (внешний) или internal (внутренний).

Полный идентификатор CONTENT_URI для простого видеоприложения Finch имеет вид content: //com. oreillу. demo .pa.finchvideo. SimpleFinchVideo/video.

CONTENT_URI должен иметь тип public static final Uri. Он определяется в классе FinchVideo нашего простого видеоприложения. В общедоступном классе API мы сначала расширим класс BaseColumns, а потом определим строку, называемую AUTHORITY:

public final class FinchVideo.SimpleVideos extends BaseColumns {public static final String SIMPLE_AUTHORITY = " com. oreillу. demo. pa. fіnchvideo. FinchVideo" ;

Затем мы определим сам CONTENTJJRI:

public static final class FinchVideo.SimpleVideos implements BaseColumns {public static final Uri CONTENTJJRI =

Uri .parseC’content://" + AUTHORITY + "/video"):

Проще говоря, при определении данного уникального идентификатора ресурса нам просто требуется выбрать строку источника, в качестве организационной части которой должен использоваться пакет Java, играющий для приложения роль идентификатора. В данном качестве нам лучше подойдет общедоступный пакет API, а не пакет реализации. Идентификатор поставщика содержимого – это просто имя класса данного поставщика содержимого. URI поставщика для простого видеоприложения Finch имеет следующий вид:

Создание имен столбцов

Процедура обмена данными между поставщиками содержимого и их клиентами принципиально похожа на то, как база данных SQL обменивается данными с приложениями, использующими базу данных. И в том и в другом случае для обмена информацией используются курсоры, наполняемые строками и столбцами, содержащими данные. Поставщик содержимого должен определять имена столбцов, которые он поддерживает, так же как приложения базы данных определяют такие столбцы для себя. Когда поставщик содержимого использует в качестве хранилища информации базу данных SQLite, очевидно, следует называть столбцы поставщика содержимого так же, как и столбцы базы данных. В SimpleFinchVideoContentP rovider ситуация обстоит именно так. Поэтому между столбцами SimpleFinchVideo ContentProvider и столбцами основной базы данных не требуется никакого отображения.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии