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 не является решением.
событие
вы можете использовать свой собственный класс приложения и звонить оттуда, где вам нужно (особенно не-деятельности).
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();