【问题标题】:Rename AppWidgetProvider without breaking existing widgets在不破坏现有小部件的情况下重命名 AppWidgetProvider
【发布时间】:2018-12-22 11:10:50
【问题描述】:

我最近发现,在我重命名了扩展 AppWidgetProvider 的类(作为代码整理的一部分)并安装了修改后的应用程序后,现有的小部件会损坏,只显示“问题加载小部件”。

向主屏幕添加一个新的小部件可以正常工作,只是现有的小部件会损坏。虽然对于作为开发人员的我来说,我不介意删除现有小部件并添加一个新小部件,但我的应用程序的用户不会愿意这样做,因为每个小部件都需要时间重新配置。

那么,有没有办法在不破坏现有小部件的情况下安全地重命名 AppWidgetProvider 类?我当然可以保持原名,但它让我感到不安,因为我永远被这个(事后看来有点混乱)的名字所困。

【问题讨论】:

    标签: android android-appwidget appwidgetprovider


    【解决方案1】:

    不幸的是,没有办法修复它。问题在于更改的 ComponentName。 AppWidgetHost 只是试图从 AppWidgetManager 获取您的小部件,而 AppWidgetManager 试图通过 ComponentName 获取以前的小部件,所以之后更改您的AppWidgetProvider 的包名称,AppWidgetHost 无法恢复您以前的小部件,因为他保存了 old ComponentName。如您所见,没有办法更改 AppWidgetProvider 的包名称。

    【讨论】:

    • :-0 只是希望我给它起一个更好的名字!没什么大不了的,真的,只是有点令人沮丧的是永远被一个类名困住(或者面对应用用户的愤怒)。
    • ye,小部件如此不受欢迎,所以他们仍然有非常糟糕的 api。
    • 这应该被标记为正确答案。我完全有同样的问题,现在我知道为什么了。
    • 虽然您是对的,没有办法修复它,但问题出在 AppWidgetService 而不是 AppWidgetHost。前者监听与应用程序包相关的广播(如添加、删除、更新)。当您使用新的 ComponentName 下的新提供程序更新您的应用程序时,它会删除以前的提供程序,因为它不再在任何地方引用。我就这个问题写了blog post
    猜你喜欢
    • 2021-10-12
    • 2012-06-19
    • 2011-01-29
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多