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 121

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