Функцию сделать suspend, уберите viewModelScope.launch{} и получайте данные из какого-нибудь lifecycleScope или своего скоупа. Можно так же в этой suspend-функции юзать контекст viewModelScope через withContext, но для вас в этом смысла мало.
Кстати, о судьбе статиков и синглтонов в андроиде-джаве. Вот пытаюсь в текущем проекте их извести - но есть засада. Инстанс бродкаст ресивера создается аж системой при ребуте телефона. Соответственно если в нем есть не статик поле - то доступ к нему возможен только если сделать тот же самый инстанс синглтоном. Ну и было бы странно иметь несколько инстансов бродкаст ресивера - если система все одно будет одним пользоваться