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

mrd*_*mrd 6 database android widget

由于一些意见,问题简而言之:

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

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

是否需要某些权限?

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


问题似乎很简单,但如果有人真的想知道我为什么要问:

我有以下设置:

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

  2. 这意味着应用程序不能包含小部件,因为小部件需要驻留在内部ROM中.

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

到目前为止工作正常.

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

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

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

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

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

and*_*per 1

如果其他方法似乎对您不起作用,我建议您使用一项服务。为应用程序小部件提供服务是很常见的事情。