我有一个应用程序的2个版本,免费和付费,但一直在维护代码。我最终将代码移动到两者引用的库中,以便更轻松地维护代码。
我发现更改AppwidgetProvider
导致启动程序删除任何现有的小部件,因此我将这些类移回库中以使提供程序保持不变,因此用户无需重新创建其小部件。启动器不再删除小部件,而是在更新后不会出现。
如果我将AppWidgetManager.getAppWidgetIds
称为组件名,就像它一直一样,appwidgetid仍在那里。仍会调用appwidgetprovider和service来更新窗口小部件,/data/system/appwidgets.xml
仍会显示窗口小部件,但启动器从不显示它。
并不是它不可见,因为长时间按下小部件位置会显示壁纸选择器。我可以很好地创建新的小部件,但我不想通过要求他们重新创建他们的小部件来挫败用户。日志不会显示启动程序或AppwidgetService
抛出的任何错误。
更新后小部件停止渲染的任何想法?它以某种方式与将大部分代码移动到单独的库中有关。谢谢!
编辑:我正在模拟器,api level 15,stock launcher
上进行测试答案 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());
如果有办法通过清单做到这一点,请告诉我!