如何从窗口小部件应用程序访问SQL数据库

时间:2012-03-20 14:58:18

标签: android database widget

由于一些评论,问题简而言之:

小部件如何访问自己的sqlite数据库?

为什么它不适用于普通的DatabaseAdapter类?

是否需要某些权限?

Remotevie / AppWidgetProvider是否有限制访问自己的数据库(没有ContentProvider)


这个问题看起来很简单,但如果有人真的想知道我为什么要问:

,请详细说明

我有以下设置:

  1. 我有一个普通的Android应用程序,它在assets文件夹中附带了很多HTML页面。由于应用程序的大小,首选的安装位置是外部SD卡。这很好。

  2. 这意味着该应用无法包含小部件,因为小部件需要驻留在内部ROM中。

  3. 相反,小部件将从外部SD卡上的应用程序数据库中读取。这是通过ContentProvider / ContentProviderClient实现的。

  4. 到目前为止一切正常。

    现在,该小部件需要在每个实例的基础上维护一些持久性配置设置。因此,AppWidgetProvider类不能使用首选项,因为它们将基于每个类应用。

    因此,为了保留(非常复杂的)实例 - 特定配置数据,我希望AppWidgetProvider类拥有自己的小sqllite数据库。

    现在,虽然我可以通过contentprovider从小部件访问应用程序的数据库,但似乎小部件无法访问自己的数据库。我在widget项目中有一个数据库适配器类;在AppWidgetProvider中,我有Context,但似乎没有写作。

    对数据库适配器的调用通过OK(我已完成一些日志记录),但是当我检查表时,没有写入。

    为什么?我是否真的需要窗口小部件中的ContentProvider来访问窗口小部件的数据库?我不想走这条路,因为当我实现从小部件访问apps数据库时,我不得不通过ContentProviderClient而不是ContentProvider。这将非常麻烦。因为我需要比CRUD更多的东西,显然这将涉及创建自定义ContentProviderClient。 android文档明确指出“如果使用完全在您自己的应用程序中,您不需要提供程序来使用SQLite数据库。”那么恕我直言,这意味着,小部件可以直接访问其数据库?我需要特殊权限吗?我怀疑,因为小部件在主屏幕进程中作为RemoteViews运行,对db的访问在某种程度上是有限的? 有关于此的任何想法,想法和暗示吗?

1 个答案:

答案 0 :(得分:1)

我建议使用服务,如果没有其他似乎适合你。为app小部件提供服务是很常见的事情。