由于一些评论,问题简而言之:
小部件如何访问自己的sqlite数据库?
为什么它不适用于普通的DatabaseAdapter类?
是否需要某些权限?
Remotevie / AppWidgetProvider是否有限制访问自己的数据库(没有ContentProvider)
我有以下设置:
我有一个普通的Android应用程序,它在assets文件夹中附带了很多HTML页面。由于应用程序的大小,首选的安装位置是外部SD卡。这很好。
这意味着该应用无法包含小部件,因为小部件需要驻留在内部ROM中。
相反,小部件将从外部SD卡上的应用程序数据库中读取。这是通过ContentProvider / ContentProviderClient实现的。
到目前为止一切正常。
现在,该小部件需要在每个实例的基础上维护一些持久性配置设置。因此,AppWidgetProvider类不能使用首选项,因为它们将基于每个类应用。
因此,为了保留(非常复杂的)实例 - 特定配置数据,我希望AppWidgetProvider类拥有自己的小sqllite数据库。
现在,虽然我可以通过contentprovider从小部件访问应用程序的数据库,但似乎小部件无法访问自己的数据库。我在widget项目中有一个数据库适配器类;在AppWidgetProvider中,我有Context,但似乎没有写作。
对数据库适配器的调用通过OK(我已完成一些日志记录),但是当我检查表时,没有写入。
为什么?我是否真的需要窗口小部件中的ContentProvider来访问窗口小部件的数据库?我不想走这条路,因为当我实现从小部件访问apps数据库时,我不得不通过ContentProviderClient而不是ContentProvider。这将非常麻烦。因为我需要比CRUD更多的东西,显然这将涉及创建自定义ContentProviderClient。 android文档明确指出“如果使用完全在您自己的应用程序中,您不需要提供程序来使用SQLite数据库。”那么恕我直言,这意味着,小部件可以直接访问其数据库?我需要特殊权限吗?我怀疑,因为小部件在主屏幕进程中作为RemoteViews运行,对db的访问在某种程度上是有限的? 有关于此的任何想法,想法和暗示吗?
答案 0 :(得分:1)
我建议使用服务,如果没有其他似乎适合你。为app小部件提供服务是很常见的事情。