android запуск активности из службы

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 если условие удовлетворяет start

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

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

6 ответов


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

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

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

 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.


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

    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 для не создание экземпляра активности снова. Удачи вам!


не работает Context на Service; смог получить (пакет) Context так:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);

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

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


событие

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

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();