这是一个操作系统的漏洞,因为它更新应用程序的方式导致它们在相当长的时间内不可用。如果启动器在此期间更新小部件,则很可能会将它们解除,除非它实现了特定的解决方法以避免这种情况。
请在此处查看问题,以便(也许)Google考虑修复它:https://code.google.com/p/android/issues/detail?id=188137
我在将S4升级到安卓棒棒糖后发现我的小部件消失了。偶然发现,如果您双击左侧软键,屏幕底部会出现一个小部件图标。点击该图标即可打开小部件,所有小部件都在那里!
如果您更改小部件的确切包路径,那么在升级时它将会中断并且小部件将会消失。
我们正在使用MvvmCross实现Xamarin.Android项目。该项目使用小部件,在应用程序更新后,小部件消失了。链接中提到的问题为我们提供了一条找到解决方案的路径,我们使用APK-Analyzer分析旧版和新版APK之间的差异,并通过查看AndroidManifiest.xml文件发现所使用的AppWidgetProvider具有不同的包名称。通过进一步搜索,我们发现了来自Microsoft的发布说明,其中写道:
在此版本中,生成的Java类型名称与旧版本不同。任何明确使用以md5开头的旧名称之一的项目都需要手动更新以适应此更改。有关生成的Java类型名称的破坏性更改,请参见下面的内容。
通过将以下内容替换为定义常量名称:
[BroadcastReceiver(Label = "Widget Title")]
public class CustomProvider : AppWidgetProvider
到
[BroadcastReceiver(Label = "Widget Title", Name = "<old package name>.CustomProvider")]
public class CustomProvider : AppWidgetProvider
问题得到解决。