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

标签 android android-widget

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

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

如果我为组件名称调用 AppWidgetManager.getAppWidgetIds,就像往常一样,appwidgetid 仍然存在。 appwidgetprovider 和服务仍然会被调用来更新小部件,/data/system/appwidgets.xml 仍然会显示小部件,但启动器不会显示它。

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

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

编辑:我正在模拟器、api 级别 15、stock 启动器上进行测试

最佳答案

好的,我找到了一个解决方案,但我为它的内容感到恶心......

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

应用包:com.sample.package

Activity :我的 Activity

库:com.sample.package.core

Activity :我的 Activity

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

然后,任何...

new Intent(context, MyActivity.class)

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

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

如果有办法通过 list 执行此操作,请告诉我!

关于android - 使用库更新应用程序后小部件消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11017798/

相关文章:

android - 如何使用 EditText 下面的 xml(形状)将线条设置为背景?

android - 在 Android 中将一系列原始图像转换为电影帧

android - 从相机拍照后图像未在 ImageView 中设置

android - 我可以在不运行 Android Studio 时删除这些构建文件夹吗?

android - WidgetProvider onDisable、onDeleted 未调用

Android:以编程方式启用/禁用应用程序小部件

android - 单击小部件时的自定义快速操作

android - 如何定期更新小部件,比如每 5 秒更新一次

android - 提升在 Android 主屏幕小部件中不起作用吗?

android - 具有不同对象的 ListView 和适配器