Android 12: как предотвратить перезапуск активности при смене обоев телефона?

На Android 12

  1. если мы откроем деятельность

  2. перейдите на главный экран телефона, чтобы сменить обои

  3. Вернитесь к нашей деятельности, деятельность возобновится.

Похоже, это связано с темой Material You.

Я хотел бы отключить перезапуск активности, когда мое приложение выходит на передний план. Есть способ?

1 ответ

Это нетрадиционное изменение конфигурации. Под «нетрадиционным» я подразумеваю, что его нельзя заблокировать android:configChanges - ваша деятельность будет уничтожена и воссоздана, нравится вам это или нет.

Если у вас есть объекты до и после изменения, вы можете определить, что этот сценарий произошел, вызвав diff() на более новом, чтобы сравнить его со старым:

      val diff = resources.configuration.diff(vm.originalConfiguration)

Log.d("WallpaperCCTest", "matches CONFIG_ASSETS_PATHS? ${(diff.toLong() and 0x80000000) != 0L}")

Здесь, vm.originalConfiguration указывает на более старый, и мы получаем ток от Resources объект. (diff.toLong() and 0x80000000) != 0L будет оценивать trueесли смена обоев или что-то подобное привело к изменению конфигурации. Для этого есть и другие крайние случаи - все это «неблокируемое изменение конфигурации» произошло, когда Sony попросила Google добавить поддержку оверлеев ресурсов времени выполнения (RRO) еще в 2017 году. Таким образом, некоторые из этих приложений «изменить системную тему» ​​могут сработать. это же неблокируемое изменение конфигурации.

Как отмечает Нгуен Хой Нам , вы можете обнаружить это по onConfigurationChanged() обычай Application. Или пусть ваша модель просмотра придерживается предыдущего Configuration и сравните его с текущим в onCreate() вашей деятельности.

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

Другие вопросы по тегам