Как получить доступ к базе данных sql из приложения виджета

Из-за некоторых комментариев вопрос в двух словах:

Как виджет может получить доступ к собственной базе данных sqlite?

Почему он не работает с простым классом DatabaseAdapter?

Требуются ли определенные разрешения?

Существуют ли ограничения, налагаемые на Remotevie/AppWidgetProvider для доступа к собственной базе данных (без ContentProvider)


Вопрос кажется простым, но подробности следуют, если кто-то действительно хочет знать, почему я спрашиваю:

У меня есть следующая установка:

  1. У меня есть обычное приложение для Android, которое поставляется с довольно большим количеством HTML-страниц в папке с ресурсами. Из-за размера приложения предпочтительным местом установки является внешняя SD-карта. Это прекрасно работает.

  2. Это означает, что приложение не может содержать виджет, потому что этот виджет должен находиться во внутреннем ПЗУ.

  3. Вместо этого виджет будет считывать данные из базы данных приложения на внешней SD-карте. Это достигается с помощью ContentProvider/ContentProviderClient.

Пока все работает нормально.

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

Итак, чтобы сохранить (довольно сложные) данные конфигурации, специфичные для экземпляра, я хочу, чтобы класс AppWidgetProvider имел свою собственную небольшую базу данных sqllite.

Теперь, когда я могу получить доступ к базе данных приложения из виджета через контент-провайдера, кажется, что виджет не может получить доступ к своей собственной базе данных. У меня есть класс адаптера базы данных в проекте виджета; внутри AppWidgetProvider у меня есть Context, но записи, похоже, не происходит.

Вызовы к адаптеру базы данных проходят успешно (я выполнил некоторые журналы), но когда я просматриваю таблицы, записи не происходит.

Почему? Мне действительно нужен ContentProvider внутри виджета для доступа к базе данных виджета? Я не хочу идти по этому пути, потому что, когда я реализовал доступ к базе данных приложений из виджета, мне пришлось пройти через ContentProviderClient вместо ContentProvider. Это было бы очень громоздко. Поскольку мне нужно немного больше, чем доступ к CRUD, это, очевидно, потребует создания собственного ContentProviderClient. В документах Android четко указано, что «вам не нужен провайдер для использования базы данных SQLite, если это использование полностью в вашем собственном приложении». Итак, ИМХО, это будет означать, что виджет может напрямую обращаться к своей базе данных? Нужны ли мне специальные разрешения? Я подозреваю, что из-за того, что виджеты работают как RemoteViews в процессе рабочего стола, доступ к БД как-то ограничен? Есть какие-нибудь мысли, идеи, подсказки по этому поводу?

6
задан boisvert 12 April 2012 в 15:14
поделиться