startActivityForResult из ограниченного сервиса

#android #android-activity #android-service

#Android #android-активность #android-сервис

Вопрос:

У меня есть служба, которая ограничена действием A, из этой службы мне нужно вызвать действие B и дождаться результата.

Мне удается вызвать действие B таким образом:

 val intent = Intent(contextOfActivityA, ActivityB::class.java)
(contextOfActivityA as ComponentActivity).startActivityForResult(intent, 123)
  

Проблема в том, что я не знаю, как получить результат ActivityB.
Если я использую onActivityResult, он никогда не вызывается:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (resultCode == Activity.RESULT_OK) {
        //result
    }
  

Как я могу это сделать? Имейте в виду, что я могу управлять только сервисом, поэтому я не могу изменять или обрабатывать вызов результата в действии A.

Спасибо

Комментарии:

1. «из этой службы мне нужно вызвать действие B и дождаться результата» — это действительно пугающе с точки зрения архитектуры приложений Android.

2. Спасибо за ответ, можете ли вы объяснить, почему?

3. Пожалуйста, объясните, почему вы считаете, что вам нужно это сделать и что именно вы пытаетесь сделать.

4. В конце я изменил инфраструктуру приложения.

Ответ №1:

Это невозможно. Service s запускаются как автономные объекты, не имеют пользовательского интерфейса и выполняют фоновые действия. Когда a Service запускает an Activity , Activity выполняется задача, связанная с пользовательским интерфейсом. An Activity может запустить другой Activity и получить результат обратно (используя startActivityForResult() ), но a Service — это совсем другое дело.

Комментарии:

1. Теперь я понимаю, что сервис может быть неправильным архитектурным выбором, поскольку мне тоже приходится работать с пользовательским интерфейсом, вы имеете в виду, какой из них самый правильный?

2. Вы можете обеспечить постоянство, записав данные в базу данных SQLite или в файлы или сохранить дату SharedPreferences . Не совсем уверен, что вы пытаетесь здесь построить.

3. В конце я изменил инфраструктуру приложения.