应用程序更新后小部件接收器停止工作

Widget receiver stops working after application is updated

我开发的小部件有一个奇怪的问题。该小部件在主屏幕上正常工作,并按应有的方式更新。我最近对代码进行了一些更改,向小部件接收器添加了更多意图。

小部件的原始意图过滤器如下:

<intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>

更改后,我添加了以下意图:

<intent-filter>
    <action android:name="com.basi.widget.MY_UPDATE_WIDGET" />
    <action android:name="android.intent.action.TIME_CHANGED" />
    <action android:name="android.intent.action.TIMEZONE_CHANGED" />
    <action android:name="android.intent.action.LOCALE_CHANGED" />
</intent-filter>

并将小部件从由服务更新更改为由发送 MY_UPDATE_WIDGET 意图的循环警报更新。 问题是当我更新应用程序时,小部件停止更新并出现 'Problem loading widget'。当我从主屏幕上删除小部件并将其添加回来时,即使我安装了进一步的更新,它也能正常工作。看起来特定更新出了问题,即意图的改变。我检查了 logcat 并且没有错误,但我注意到 onReceive 意图在初始更新后没有启动,所以这可能是问题所在。

我怀疑已经在主屏幕上的小部件知道要接收哪些意图 - 如果它没有重新初始化(通过删除它并重新添加),它不会听取新的意图,因此这就是问题发生的原因。有没有办法告诉小部件开始接收新的意图?这是一个不同的问题吗?

经过几个小时的反复试验,我发现了问题所在。我在更新中所做的更改之一是将小部件 class 移动到更新版本中的不同包中。这似乎 'break' 在包被新版本替换后现有小部件的功能。将小部件 class 文件移回原始包解决了这个问题。额外的意图没有错。

希望这对某人有所帮助。