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

Android 小部件在使用库更新应用程序后消失,android,android-widget,Android,Android Widget,我有两个版本的应用程序,免费和付费,但一直在分别维护代码。我最终将代码移动到了一个由两者引用的库中,以使维护代码更容易 我发现更改AppwidgetProvider会导致启动器删除任何现有的小部件,因此我将这些类从库中移出,以保持提供程序不变,这样用户就不必重新创建他们的小部件。启动器不再删除这些小部件,而是在更新后不再显示它们 如果我像往常一样调用AppWidgetManager.getAppWidgetIds来获取组件名,那么appwidgetid仍然存在。appwidgetprovider

我有两个版本的应用程序,免费和付费,但一直在分别维护代码。我最终将代码移动到了一个由两者引用的库中,以使维护代码更容易

我发现更改
AppwidgetProvider
会导致启动器删除任何现有的小部件,因此我将这些类从库中移出,以保持提供程序不变,这样用户就不必重新创建他们的小部件。启动器不再删除这些小部件,而是在更新后不再显示它们

如果我像往常一样调用
AppWidgetManager.getAppWidgetIds
来获取组件名,那么appwidgetid仍然存在。appwidgetprovider和服务仍然被调用以更新小部件,并且
/data/system/appwidgets.xml
仍然显示小部件,但启动器从不显示它

这并不是说它是不可见的,因为只要按下小部件的位置就会打开墙纸选择器。我可以很好地创建新的小部件,但我不想让用户重新创建他们的小部件而感到沮丧。日志不会显示启动器或AppwidgetService引发的任何错误

知道为什么小部件在更新后停止渲染吗?它在某种程度上与将大部分代码移动到单独的库中有关。谢谢


编辑:我正在一个模拟器上测试,api级别15,stock launcher

好的,我找到了一个解决方案,但我对它是什么感到恶心

在阅读了清单中声明的类如何永不更改之后,我开始在应用程序中将清单中的每个类创建为一个类,扩展库中相应的类。然后,我不得不改变每一个意图,使用forName来包含正确的类。因此,这种情况的一个例子是:

应用程序包:com.sample.package

活动:我的活动

库:com.sample.package.core

活动:我的活动

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

那么,任何

new Intent(context, MyActivity.class)
…在图书馆里必须成为

new Intent(context, Class.forName(context.getPackageName() + "." + MyActivity.class.getSimpleName());
如果有办法通过舱单做到这一点,请让我知道

您好,您提到“更改AppwidgetProvider导致启动器删除任何现有的小部件”。您的意思是更改扩展AppwidgetProvider的类的代码吗?