使用库更新应用程序后,小部件消失

时间:2012-06-13 15:03:24

标签: android android-widget

我有一个应用程序的2个版本,免费和付费,但一直在维护代码。我最终将代码移动到两者引用的库中,以便更轻松地维护代码。

我发现更改AppwidgetProvider导致启动程序删除任何现有的小部件,因此我将这些类移回库中以使提供程序保持不变,因此用户无需重新创建其小部件。启动器不再删除小部件,而是在更新后不会出现。

如果我将AppWidgetManager.getAppWidgetIds称为组件名,就像它一直一样,appwidgetid仍在那里。仍会调用appwidgetprovider和service来更新窗口小部件,/data/system/appwidgets.xml仍会显示窗口小部件,但启动器从不显示它。

并不是它不可见,因为长时间按下小部件位置会显示壁纸选择器。我可以很好地创建新的小部件,但我不想通过要求他们重新创建他们的小部件来挫败用户。日志不会显示启动程序或AppwidgetService抛出的任何错误。

更新后小部件停止渲染的任何想法?它以某种方式与将大部分代码移动到单独的库中有关。谢谢!

编辑:我正在模拟器,api level 15,stock launcher

上进行测试

1 个答案:

答案 0 :(得分:0)

好的,我找到了一个解决方案,但我感到很生病...

在阅读了清单中声明的​​类如何永远不会改变之后,我开始在清单中创建每个类作为应用程序中的类,扩展库中的相应类。然后,我必须使用forName更改每个Intent以包含正确的类。所以,这个场景的一个例子是:

app package:com.sample.package

活动:MyActivity

library:com.sample.package.core

活动:MyActivity

应用程序中有MyActivity,库中有MyActivity。应用程序中的MyActivity只是扩展了com.sample.package.core.MyActivity。

然后,出现任何......

new Intent(context, MyActivity.class)

...在图书馆必须成为......

new Intent(context, Class.forName(context.getPackageName() + "." + MyActivity.class.getSimpleName());

如果有办法通过清单做到这一点,请告诉我!