Как начать работу со службы?

Можно ли запустить 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);