AppWidgetManager getAppWidgetIds返回旧的Widget ID

时间:2012-09-17 15:42:10

标签: android android-appwidget

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

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

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

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

1 个答案:

答案 0 :(得分:12)

我也碰到了这个。我猜测getAppWidgetIds只是被编程为始终获得与该小部件提供者关联的所有ID。为了解决这个问题,我必须通过在onUpdate方法中保存id并将其删除到我的AppWidgetProvider的onDelete方法中来将Widget ID保存到我的共享首选项。

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
    }
}