проблема понять контент-провайдера - PullRequest
0 голосов
/ 06 июня 2011

Уважаемый, я запутался в использовании провайдера контента в приложениях для Android. Я перебираю разные стороны и читаю его, но я все еще не понимаю провайдера контента ... Кто-нибудь может объяснить это простым способом, как его использовать?

Контент-провайдеры хранят и извлекают данные и делают их доступными для всех приложений .... что это значит?

может ли это означать любое имя пакета или имя пакета ... если я делаюдругое приложение с именем пакета diffrent, тогда этот cp также доступен в этом пакете?

Ответы [ 3 ]

4 голосов
/ 16 апреля 2016

ОК, прежде всего, поставщик контента будет использоваться тогда и только тогда, когда вы хотите использовать одни и те же данные через несколько приложений.Вы все еще можете использовать его, если хотите внедрить его в свое приложение.Теперь по определению ContentProvider «Поставщики контента управляют доступом к структурированному набору данных. Они инкапсулируют данные и предоставляют механизмы для определения безопасности данных».(Согласно Руководствам для разработчиков Android)

Другими словами, это как новый уровень абстракции, который вы добавляете к своим данным, назначая нового посредника, который будет запрашивать все, о чем вы его проситеделать (читать, писать, обновлять базу данных, файлы или веб-сервисы).И этот посредник доступен не только для вас, но и для других приложений, если для тега android:exported установлено значение true в <provider> в файле манифеста.

ContentProviderВам нужно реализовать:

  1. Контракт: в основном класс с открытыми статическими переменными с именами таблиц и полями информации для этих таблиц.
  2. Модель данных: обычно база данныхв SQLite, но вы можете реализовать его также с помощью сторонних библиотек, таких как SugarORM, GreenDao, Retrofit, локальные файлы и т. д.).
  3. Ваш пользовательский ContentProvider: Расширьте ContentProvider и установите здесь вызовы для вашей модели данных.

Это хорошее руководство по созданию собственного ContentProvider: http://www.grokkingandroid.com/android-tutorial-writing-your-own-content-provider/

Есть также несколько библиотек, которые помогут вам автоматически создать ContentProvider (я нахожу это удивительным, потому что вам нужно всего 10 минут, чтобы настроить все, вместо того, чтобы создавать свой собственный ContentProvider с нуля, который может занять несколько дней).Мой личный фаворит - схема: https://github.com/SimonVT/schematic

Надеюсь, это поможет.С уважением!

1 голос
/ 06 июня 2011

как это использовать?

вы на самом деле используете его не напрямую, а через распознаватель контента (который, в соответствии с указанным вами URI, запрашивает правильный ContentProvider):

getContentResolver().query("content://com.myapp.myprovider/data/", ...);

найдет вашего контент-провайдера, если тот зарегистрирован для обработки URI, которые соответствуют "content: //com.myapp.myprovider/data/"

если я делаю еще одно приложение из diffrent название пакета то что к.п. является доступны также в этом пакете?

Если вы решили опубликовать контент-провайдера, он доступен за пределами вашего приложения (это настройка в манифесте).

В чем главное преимущество использования c.p.?

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

0 голосов
/ 06 июня 2011

Поскольку под пакетом подразумевается уникальный идентификатор приложения, как вы можете создать приложение с тем же именем пакета? Если это был твой вопрос, я думаю, что ответил на него. Если вы не понимаете что-то другое - не стесняйтесь спрашивать. Удачи!

P.S. Подумайте о принятии некоторых ответов, ваш коэффициент принятия низкий.

...