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 à partir d’ Activity
En Activity
si la condition satisfait au démarrage
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 l’ Activity
en cours 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 veux vous faire savoir qu’aucun de ces éléments n’a fonctionné pour moi. Ce qui a fonctionné pour moi était:
Intent dialogIntent = new Intent(this, myActivity.class); dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.startActivity(dialogIntent);
et dans 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é une nullpointerexception
.
Une autre chose qui mérite d’être mentionnée: si 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 (faite de service + certaines activités) était au premier plan à 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 utilisés ici. La clé du succès é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 Context
(package) de la même manière:
Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
Si vous avez besoin de recalculer une activité qui est dans bacgrounde, à partir de votre service, je suggère le lien suivant. Intent.FLAG_ACTIVITY_NEW_TASK n’est pas la solution.
Alternativement,
Vous pouvez utiliser votre propre classe d’application et appeler depuis n’importe quel lieu (en particulier les non-activités).
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 Application:
Alors appelez:
App.getContext();