Android начать деятельность с сервиса - PullRequest
130 голосов
/ 31 августа 2010

Android:

public class LocationService extends Service {

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        startActivity(new Intent(this, activity.class));
    }
}

Я запустил этот сервис с Activity

В Activity, если условие удовлетворяет началу

startService(new Intent(WozzonActivity.this, LocationService.class));

с моего LocationServiceупомянутый выше не может запустить Activity, как я могу получить контекст текущего выполнения Activity в классе обслуживания?

Ответы [ 6 ]

316 голосов
/ 31 августа 2010

Изнутри Класс обслуживания:

Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
17 голосов
/ 20 декабря 2012

У меня была такая же проблема, и я хочу сообщить вам, что ничего из вышеперечисленного не помогло мне. То, что сработало для меня, было:

 Intent dialogIntent = new Intent(this, myActivity.class);
 dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 this.startActivity(dialogIntent);

и в одном из моих подклассов, хранящихся в отдельном файле, мне нужно было:

public static Service myService;

myService = this;

new SubService(myService);

Intent dialogIntent = new Intent(myService, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myService.startActivity(dialogIntent);

Все остальные ответы дали мне nullpointerexception.

8 голосов
/ 08 августа 2011

Еще одна вещь, о которой стоит упомянуть: хотя приведенный выше ответ прекрасно работает, когда наша задача находится в фоновом режиме, единственный способ, которым я мог бы заставить ее работать, если бы наша задача (состоящая из обслуживания + некоторые действия) была на переднем плане (т.е. наша деятельность была видна пользователю) была такой:

    Intent intent = new Intent(storedActivity, MyActivity.class);
    intent.setAction(Intent.ACTION_VIEW);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    storedActivity.startActivity(intent);

Я не знаю, используются ли здесь ACTION_VIEW или FLAG_ACTIVITY_NEW_TASK. Ключ к успеху был

storedActivity.startActivity(intent);

и, конечно, FLAG_ACTIVITY_REORDER_TO_FRONT за то, что вы не создали экземпляр действия снова. Желаем удачи!

1 голос
/ 12 февраля 2017

нельзя использовать Context из Service; удалось получить (пакет) Context так:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
0 голосов
/ 14 августа 2014

В качестве альтернативы,

Вы можете использовать свой собственный класс приложения и звонить из любого места, в котором вам нужно (особенно бездействия).

public class App extends Application {

    protected static Context context = null;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}

И зарегистрировать свой класс приложения:

<application android:name="yourpackage.App" ...

Тогда звоните:

App.getContext();
0 голосов
/ 24 июля 2014

Если вам нужно восстановить активность, которая находится в bacgrounde, из вашего сервиса, я предлагаю следующую ссылку. Intent.FLAG_ACTIVITY_NEW_TASK - это не решение.

https://stackoverflow.com/a/8759867/1127429

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