【问题标题】:widgets disappear after updating app, using library使用库更新应用程序后小部件消失
【发布时间】:2012-06-13 15:03:23
【问题描述】:

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

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

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

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

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

编辑:我正在模拟器上进行测试,API 级别 15,股票启动器

【问题讨论】:

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

标签: android android-widget


【解决方案1】:

好的,我找到了解决方案,但我对此感到恶心......

在阅读了清单中声明的​​类如何永远不会更改后,我将清单中的每个类创建为应用程序中的一个类,扩展库中的相应类。然后,我必须使用 forName 更改每个 Intent 以包含正确的类。所以,这个场景的一个例子是:

应用包: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());

如果有办法通过清单做到这一点,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 2022-06-13
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2018-02-27
    • 2013-03-18
    相关资源
    最近更新 更多