Intereting Posts
Регулярное выражение для соответствия символам только в начале строки Внесите Intellij IDE, выполнив обработку аннотации Kotlin / Java при изменении исходных файлов Kotlin Переменная не может назначаться в 2 Kotlin / Java – тестирование данных базы данных REST API Упрощение кода, который является одинаковым удовольствием, за исключением подписи (varargs vs map) Kotlin: Как проверить, имеет ли число десятичные точки (решение модуля не работает) Синтетическое расширение Kotlin и несколько включают в себя одну и ту же компоновку Можно ли выразить kotlin 'с' эквивалентом метода в Scala? Как преобразовать исходный файл kotlin в исходный файл java Может ли кто-нибудь здесь подробно описать структуру проекта приложения «Котлин / Родник»? Кроме того, особенности работы различных модулей Ошибка – невозможно изменить заголовок supportActionBar Объектный конструктор и Delegates.notNull Котлин – когда выражение с возвращаемым типом функции коллекции kotlin, преобразующие карту в новую карту со значениями, вычисленными из оригинала Существует ли рекомендуемое соглашение об именах для файлов, которые содержат только функции / методы расширения?

Kotlin: вызывается функция обновления пользовательского интерфейса от BroadcastReceiver onReceive

Я новичок в Kotlin, и это кажется потрясающим! Хотя сегодня я пытался сделать что-то, что на Java было очень просто, но я полностью застрял.

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


Мой код

Вот мой класс BroadcastReceiver , и он работает нормально.

 class PlugInReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action = intent.action if (action == Intent.ACTION_POWER_CONNECTED) { // Do stuff when power connected } else if (action == Intent.ACTION_POWER_DISCONNECTED) { // Do more stuff when power disconnected } } } 

Теперь в моей MainActivity (но где-то еще, позже), я хочу обновить свой пользовательский интерфейс, когда намерение запущено, например, в функции ниже, цвет фона меняется.

 private fun updateBackgroundColor( newBgColorId: Int = R.color.colorAccent){ val mainLayout = findViewById<View>(R.id.mainLayout) val colorFade = ObjectAnimator.ofObject( mainLayout, "backgroundColor", ArgbEvaluator(), oldBgColor, newBgColor) colorFade.start() } 

Вопрос

Как я могу вызвать функцию в MainActivity или обновить свой интерфейс, когда BroadcastReceiver запускает событие?


То, что я пробовал до сих пор

  • Я смотрел на наличие статической переменной где-то, сохраняя результат BroadcastReciever, а затем наблюдаемый в моем классе пользовательского интерфейса, соответственно наблюдая и вызывая соответствующую функцию. Хотя после того, как Googling, как это сделать, похоже, что это не очень хороший подход в Котлине.

  • Считал попытку запустить BroadcastReciever в потоке пользовательского интерфейса, но это звучит как ужасная идея.

  • Пробовал смешивать реализацию Java с моим классом Kotlin, но не смог заставить ее работать.

Разочарочно я нашел несколько очень похожих вопросов о SO. Однако их реализация, похоже, использует специфические для Java функции:

  • Android BroadcastReceiver onReceive Update TextView в MainActivity
  • Как обновить пользовательский интерфейс в BroadcastReceiver
  • Вызов метода активности из BroadcastReceiver на Android
  • Как обновить пользовательский интерфейс от BroadcastReceiver после скриншота

Я уверен, что это тривиальный вопрос для большинства разработчиков Android, но я потерян! Дайте мне знать, если вам нужны подробности. Большое спасибо заранее!

Solutions Collecting From Web of "Kotlin: вызывается функция обновления пользовательского интерфейса от BroadcastReceiver onReceive"