Переименуйте AppWidgetProvider, не нарушая существующие виджеты.

Недавно я обнаружил, что после того, как я переименовал свой класс, который расширяет AppWidgetProvider (как часть очистки кода), и установил модифицированное приложение, существующие виджеты сломались, отображая только «Проблема с загрузкой виджета».

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

Итак, есть ли способ безопасно переименовать класс AppWidgetProvider, не нарушая существующие виджеты? Я мог бы, конечно, просто оставить имя как есть, но это дает мне неприятное ощущение, что я навсегда застрял с этим (оглядываясь назад, немного сбивая с толку) именем.


person drmrbrewer    schedule 22.12.2018    source источник


Ответы (1)


К сожалению, исправить это невозможно. Проблема в измененном ComponentName. AppWidgetHost просто пытается получить ваши виджеты от AppWidgetManager, а AppWidgetManager пытается получить предыдущие виджеты от ComponentName, поэтому после изменив имя вашего пакета AppWidgetProvider, AppWidgetHost не сможет восстановить ваши предыдущие виджеты, потому что он сохранил old ComponentName. Как видите, изменить имя пакета AppWidgetProvider невозможно.

person HeyAlex    schedule 25.12.2018
comment
:-0 просто жаль, что я не дал ему имя получше для начала! на самом деле ничего страшного, просто немного неприятно застрять с именем класса навсегда (или столкнуться с гневом пользователей приложения). - person drmrbrewer; 26.12.2018
comment
да, виджеты настолько непопулярны, что у них до сих пор очень плохой API. - person HeyAlex; 28.12.2018
comment
Это должно быть отмечено как правильный ответ. У меня была точно такая же проблема, и теперь я понимаю, почему. - person Doctiger; 05.08.2019