AppWidgetManager getAppWidgetIds返回旧的Widget ID

我正在尝试获取我的小部件的所有ACTIVE实例的列表。 在我的AppWidgetProvider的OnUpdate方法中,我正在执行以下操作:

// Get all ids ComponentName thisWidget = new ComponentName(context, this.getClass()); int[] lastWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 

问题是,如果你添加一个小部件到你的主屏幕,然后删除它,getAppWidgetIds仍然返回一个列表,其中包含刚刚删除的部件的ID。

有没有办法只检索主屏幕上活动的小部件的ID?

Solutions Collecting From Web of "AppWidgetManager getAppWidgetIds返回旧的Widget ID"

我也遇到了这个。 我猜getAppWidgetIds是简单的编程,总是得到所有的ID相关的小工具提供者。 为了解决这个问题,我必须将Widget ID保存到我的共享首选项中,方法是将该ID保存在onUpdate方法中,并将其删除到我的AppWidgetProvider的onDelete方法中。

 public class MyProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // Update your widget as normal // If the Id isn't already saved to your db/app preference, save it now } public void onDeleted (Context context, int[] appWidgetIds) { // Remove each id passed in through appWidgetIds // "un-save" them from your db or app preferences } }