ВИЗНАЧЕННЯ загальнодоступні API ПОСТАЧАЛЬНИКА ВМІСТУ в Android додатку

&nbsp

Ми вже говорили про те, як клієнти використовують постачальники вмісту, тут ми докладніше розповімо майбутнім авторам постачальників вмісту про те, як повністю реалізувати загальнодоступний інтерфейс (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 має вигляд comoreillydemopafinchvideoSimpleFinchVideo Організаційна частина – це 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 повернув єдиний телефонний номер типу vndandroidcursoritem / phone Якби ми мали справу з URI content :/ / contacts/peoplе/1/phone, то додаток повернуло б список всіх телефонних номерів певної людини – того, який має ідентифікаційний номер 1, – a MIME-тип повертаються даних був би vndandroidcursordir / phone

Як було зазначено вище, постачальники вмісту можуть інтерпретувати частини шляху унікального ідентифікатора ресурсу таким чином, як це потрібно їм для роботи Це означає, що частина шляху може використовувати елементи, що входять до складу шляхи для того, щоб фільтрувати дані, що повертаються, викликає стороні Наприклад, вбудований в систему постачальник вмісту medi а може повертати як зовнішні, так і внутрішні дані, залежно від того, чи міститься в унікальному ідентифікаторі ресурсу слово external (зовнішній) або internal (внутрішній)

Повний ідентифікатор CONTENT_URI для простого відеододатки Finch має вигляд content: / / com oreillу demo pafinchvideo SimpleFinchVideo / video

CONTENT_URI повинен мати тип public static final Uri Він визначається в класі FinchVideo нашого простого відеододатки У загальнодоступному класі API ми спочатку розширимо клас BaseColumns, а потім визначимо рядок, звану AUTHORITY:

public final class FinchVideoSimpleVideos extends BaseColumns {public static final String SIMPLE_AUTHORITY = com oreillу demo pa fіnchvideo FinchVideo

Потім ми визначимо сам CONTENTJJRI:

public static final class FinchVideoSimpleVideos implements BaseColumns {public static final Uri CONTENTJJRI =

Uri parseCcontent://&quot + AUTHORITY + &quot/video&quot):

Простіше кажучи, при визначенні даного унікального ідентифікатора ресурсу нам просто потрібно вибрати рядок джерела, в якості організаційної частини якої повинен використовуватися пакет Java, граючий для програми роль ідентифікатора У даній якості нам краще підійде загальнодоступний пакет API, а не пакет реалізації Ідентифікатор постачальника вмісту – це просто імя класу даного постачальника вмісту URI постачальника для простого відеододатки Finch має наступний вигляд:

Створення імен стовпців

Процедура обміну даними між постачальниками вмісту та їх клієнтами принципово схожа на те, як база даних SQL обмінюється даними з додатками, що використовують базу даних І в тому і в іншому випадку для обміну інформацією використовуються курсори, які наповнюються рядками і стовпцями, що містять дані Постачальник вмісту повинен визначати імена стовпців, які він підтримує, так само як додатки бази даних визначають такі стовпці для себе Коли постачальник вмісту використовує як сховища інформації базу даних SQLite, очевидно, слід називати стовпці постачальника вмісту так само, як і стовпці бази даних У SimpleFinchVideoContentP rovider ситуація йде саме так Тому між стовпцями SimpleFinchVideo ContentProvider і стовпцями основної бази даних не потрібно ніякого відображення

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*