AppWidgetManager getAppWidgetIds возвращает старые идентификаторы виджетов

Я пытаюсь получить список всех активных экземпляров моего виджета. В методе OnUpdate моего AppWidgetProvider я делаю следующее:

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

Проблема заключается в том, что если вы добавите виджет на рабочий стол и затем удалите его, getAppWidgetIds по-прежнему возвращает список, содержащий среди прочего идентификатор только что удаленного виджета.

Есть ли способ получить идентификаторы только виджетов, которые активны на главном экране?

Ответы

Ответ 1

Я тоже столкнулся с этим. Я предполагаю, что getAppWidgetIds просто запрограммирован на то, чтобы всегда получать все идентификаторы, когда-либо связанные с этим поставщиком виджета. Чтобы решить эту проблему, я должен был сохранить идентификатор Widget в своих общих настройках, сохранив идентификатор в методе onUpdate и удалив его в методе onDelete моего AppWidgetProvider.

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