如何在升级/重新安装应用程序后更新Android AppWidget?

8
我创建了一个应用程序(https://play.google.com/store/apps/details?id=com.widget.analytics),它可以使用AppWidget在Android主屏幕上显示Google Analytics统计信息。
不幸的是,在将应用程序升级到新版本后,用户需要删除之前创建的所有小部件,并重新安装它们。这非常令人烦恼。但我相信有一种方法可以解决这个问题。
在升级应用程序后,小部件并没有被销毁,它们只是处于从布局中继承的“默认”状态。
是否有任何四个小部件回调函数可用于更新小部件?是否有一个升级后回调函数,我可以根据它来更新小部件?
2个回答

4

我没有意识到在应用程序重新安装后会调用onUpdate。 所以代码只会进入更新方法,并且将在每次升级后调用:

public class WidgetProvider extends AppWidgetProvider {

  @Override
  public void onUpdate (Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
    // Here we update the widget :)
  }

}

我有点困惑,如果在应用程序更新后,小部件自动更改被调用了,那么你的问题中为什么要提到“用户需要删除之前创建的所有小部件并重新安装它们”呢? - Aalap Patel

1
您可以注册一个BroadcastReceiver来接收ACTION_PACKAGE_REPLACED广播,然后在接收器中通知您的小部件重新加载(可能通过AppWidgetManager.notifyAppWidgetViewDataChanged(..))。您还可能需要接收ACTION_MY_PACKAGE_REPLACED广播。

在您的软件包被卸载之后,在软件包实际准备运行之前,会发出哪个广播。它不起作用。 - Robin Davies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接