2012-06-13 35 views
4

我有2个版本的应用程序,免费和付费,但一直在维护代码。我终于将代码移入了两个引用的库中,以便更轻松地维护代码。小部件在更新应用程序后消失,使用库

我发现更改AppwidgetProvider导致启动程序删除任何现有的小部件,所以我将这些类从库中移出以保持提供程序相同,以便用户不必重新创建其小部件。启动程序不再删除小部件,但相反,它们在更新后不会显示。

如果我为组件名称调用AppWidgetManager.getAppWidgetIds,因为它始终是,appwidgetid仍然存在。 appwidgetprovider和服务仍然被调用来更新小部件,并且/data/system/appwidgets.xml仍然显示小部件,但启动程序从不显示它。

这并不是说它不可见,只要按下小部件位置就可以调出壁纸选择器。我可以创建新的小部件,但我不想通过让用户重新创建小部件来挫败用户。日志不会显示启动程序或AppwidgetService引发的任何错误。

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

编辑:我在模拟器上,API等级15,股票发射

+0

嗨,你提到“改变AppwidgetProvider导致发射器删除任何现有的小部件”。你的意思是改变扩展AppwidgetProvider的类的代码吗? – jclova

回答

0

OK测试,我发现了一个解决办法,但我觉得不舒服的是什么...

阅读后如何清单中声明的​​类永远不会改变,我去创建清单中的每个类作为应用程序中的类,从而扩展库中相应的类。然后,我必须改变每个意图,以包含正确的类,使用forName。所以,这种情况下的一个例子是:

的应用程序包:com.sample.package

活动:MyActivity

库: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()); 

如果有一种方法,通过该清单要做到这一点,请让我知道!

+0

你尝试过使用别名吗? – 3c71

相关问题