Как менять иконку запуска Android-приложения
Пользователям приложения можно предоставить возможность выбирать иконку лаунчера. Это делается для кастомизации, сезонных акций или платного функционала закрытого пейволом.
Реализовать можно через Activity Alias – единственный универсальный механизм подмены иконки. Они должны быть заранее импортированы в проект. Адаптивные векторы с атрибутом <monochrome> будут перекрашиваться в цвета обоев, независимо от выбранного иконки.
Aliases (псевдонимы, точки входа) прописываются в манифесте и ссылаются на существующую активити. Они могут иметь собственный интент-фильтр MAIN+LAUNCHER, иконки и другие параметры. Операционная система найдет псевдоним при парсинге манифеста и добавит ярлык в лаунчер. Чтобы в лаунчере отображалась только одна иконка – один алиас включаем (android:enabled="true"), остальные отключаем.
Управление алиасами осуществляется через PackageManager. Получить текущее состояние алиаса можно вызвав getComponentEnabledSetting. А установить – через setComponentEnabledSetting. Когда мы выбираем иконку, фактически один псевдоним включается, а остальные отключаются. Если иконка еще не выбиралась – отобразится дефолтная из манифеста. После выбора процесс приложения будет убит. Иконка обновится сразу. Есть лаунчеры, которые ее кэшируют и процесс займет до 500 мс.
Если по каким-либо причинам все алиасы отключаются (сброс настроек приложения, переустановка из стороннего маркета, ошибочное обновление) нужна безопасная инициализация, иначе пользователь потеряет ярлык в списке приложений. Для этого в Application.onCreate() нужно пройтись по всем алиасам и если ни один из них не включен – активировать дефолтный.
Я записал воркшоп, как это делается на практике:
🐗 Смотреть на Ютубе
🐗 Смотреть на Бусти
🐗 Исходники на Гитхабе
🐗 Документация в Роадмапе
#video@foundout
Post #286
559
