Как начать Активность с Сервиса?

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

4 ответа

Решение

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

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

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

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

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

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);
Другие вопросы по тегам