Как начать Активность с Сервиса? - PullRequest
38 голосов
/ 11 августа 2010

Можно ли начать действие с сервиса? Если да, как мы можем этого достичь?

Ответы [ 4 ]

71 голосов
/ 11 августа 2010

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 - ваш сервис.

20 голосов
/ 08 марта 2012

Даже если инфраструктура позволяет вам запускать активность из службы, это, вероятно, неправильное решение.Причина в том, что задача Сервиса может или не может быть в центре внимания пользователя в то время, когда Сервис желает взаимодействовать с пользователем.Нарушение того, что пользователь делает в настоящее время, считается плохой формой проектирования, особенно из-за того, что предполагается работать в фоновом режиме.

Поэтому вам следует рассмотреть возможность использования службы уведомлений с Notification Service, которая содержит PendingIntent для запуска желаемой операции, когда пользователь решает, что пришло время провести расследование.Думайте об этом как о отложенном удовлетворении.

7 голосов
/ 11 августа 2011

Это, безусловно, решит вашу проблему

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);
7 голосов
/ 31 января 2011

У меня была проблема с запуском действия из службы, это было связано с отсутствующим флагом намерений FLAG_ACTIVITY_NEW_TASK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...