Android:
public class LocationService extends Service {
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
startActivity(new Intent(this, activity.class));
}
}
J'ai lancé ce service de Activity
Dans Activity
si la condition vérifie le début
startService(new Intent(WozzonActivity.this, LocationService.class));
de mon LocationService
mentionné ci-dessus ne pouvait pas lancer Activity
, comment puis-je obtenir le contexte de la version en cours d'exécution Activity
dans la classe de service?
Depuis la classe de service:
Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
J'ai eu le même problème et je tiens à vous faire savoir qu'aucune de ces solutions ne fonctionnait pour moi. Ce qui a fonctionné pour moi a été:
Intent dialogIntent = new Intent(this, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(dialogIntent);
et dans l'une de mes sous-classes, stockées dans un fichier séparé, je devais:
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);
Toutes les autres réponses m'ont donné un nullpointerexception
.
Une autre chose à noter: bien que la réponse ci-dessus fonctionne très bien lorsque notre tâche est en arrière-plan, la seule façon de le faire fonctionner si notre tâche (constituée de service + quelques activités) était au premier plan (c’est-à-dire une de nos activités visible). à l'utilisateur) était comme ceci:
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);
Je ne sais pas si ACTION_VIEW ou FLAG_ACTIVITY_NEW_TASK sont réellement utiles ici. La clé pour réussir était
storedActivity.startActivity(intent);
et bien sûr FLAG_ACTIVITY_REORDER_TO_FRONT pour ne pas instancier l'activité à nouveau. Bonne chance!
on ne peut pas utiliser le Context
du Service
; a pu obtenir le (package) Context
de la même manière:
Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
Alternativement,
Vous pouvez utiliser votre propre classe d'applications et appeler de n'importe où (en particulier des activités non-actives).
public class App extends Application {
protected static Context context = null;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
}
Et enregistrez votre classe d'application:
<application Android:name="yourpackage.App" ...
Puis appelez:
App.getContext();