Можно ли запустить Activity из службы? Если да, как мы можем достичь этого?
Как начать работу со службы?
Ответ 1
android.app.Service
является потомком android.app.Context
, поэтому вы можете напрямую использовать startActivity
. Однако, поскольку вы запускаете это за пределами любой активности, вам нужно установить флаг FLAG_ACTIVITY_NEW_TASK
в намерении.
Например:
Intent i = new Intent();
i.setClass(this, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
где this
- ваша услуга.
Ответ 2
Даже если фреймворк позволяет вам запускать Activity из службы, это, вероятно, не является правильным решением. Причина в том, что задача службы может быть или не быть в центре внимания пользователя в момент, когда Служба желает взаимодействовать с пользователем. Прерывание того, что делает пользователь в настоящее время, считается плохой формой дизайна, особенно из-за того, что предполагается использовать в фоновом режиме.
Поэтому вам следует рассмотреть возможность использования службы уведомлений с уведомлением, в которой PendingIntent запускает требуемое действие, когда пользователь решает, что пора исследовать. Подумайте об этом как о задержанном удовлетворении.
Ответ 3
У меня возникла проблема с запуском активности из службы, это было связано с отсутствием флаг намерения FLAG_ACTIVITY_NEW_TASK.
Ответ 4
Это, безусловно, решит вашу проблему.
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(this, TaxiPlexer.class);
intent.setComponent(cn);
startActivity(intent);