Weeelp, я вернулся к разработке Android 8 лет спустя (был удивлен, обнаружив, что уже прокомментировал этот вопрос), и теперь у меня есть реальный ответ. Кажется, он стал более известен только спустя годы после того, как этот вопрос был первоначально опубликован, но в основном: в Android есть ошибка, которая оставалась неисправленной почти навсегда.
Все эти фантомные идентификаторы — это идентификаторы appWidgetId виджетов, которые вы начали создавать в какой-то момент, но были ошибочно отменены при настройке виджета.
В документации для разработчиков есть этот пример кода для подтверждения создания виджет:
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
Внимательно прочитайте совет под ним:
Совет. Когда действие конфигурации откроется впервые, установите для результата действия значение RESULT_CANCELED вместе с EXTRA_APPWIDGET_ID, как показано на шаге 5 выше. Таким образом, если пользователь откажется от действия, не дойдя до конца, узел виджета приложения будет уведомлен о том, что конфигурация была отменена и виджет приложения не будет добавлен.
Хотя Android принимает setResult(RESULT_CANCEL);
(и многие руководства используют его, и я полагаю, что даже в официальной документации когда-то был такой пример кода), это неправильно. Не передавая новый идентификатор, он остается в системе как один из тех таинственных фантомных идентификаторов.
Правильный способ отменить создание виджета — setResult(RESULT_CANCEL, resultValue);
person
Izkata
schedule
28.01.2019