2015-08-23 3 views
1

Mon application a deux activités A et B. A est la racine de la tâche, et est celle qui est lancée à partir de l'icône de lancement. B peut être démarré à partir de A.Comment faire pour reprendre une tâche existante dans son état actuel

En plus de lancer A à partir de l'icône de lancement, il est possible de lancer A en cliquant sur un fichier dans une autre application, par ex. cliquant sur une pièce jointe d'un e-mail ou un fichier dans Drive. J'ai fait ceci en ajoutant des actions et des catégories au filtre d'intention dans le fichier manifeste.

Je veux faire en sorte que lorsque A est lancé à partir d'une autre application, au lieu de créer une nouvelle tâche, je veux que la tâche existante reprenne dans le même état que précédemment. Cela pourrait être l'activité A ou B, où que l'utilisateur se trouvait avant d'avoir appuyé sur la maison.

J'ai essayé toutes sortes de modes de lancement et de drapeaux d'intention, mais rien ne semble fonctionner.

Répondre

2

diffusion d'une intention qui est identique à l'intention du lanceur dans votre manifeste:

Intent intent = new Intent(context, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setAction(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 

Je ne sais pas pourquoi, mais cela soulève la tâche existante au lieu de démarrer une nouvelle. En revanche, une intention de lancement a obtenu le « officiel » va réellement commencer une nouvelle tâche:

Intent intent = context.getPackageManager() 
    .getLaunchIntentForPackage(context.getPackageName()); 
+0

Essayé cela et il semble fonctionner, au moins sur un appareil Pixel avec API 26. La seule mise en garde semble être que la tâche est rouverte sans une animation d'entrée. – AlgoRyan

0

changez le mode de lancement en singletask. et l'écoute onNewIntent()

+0

Si vous changez le mode de lancement pour tâche unique, vous pouvez détecter qui a été reçu la nouvelle intention en utilisant 'onNewIntent', mais la connaissance que la nouvelle intention a été reçue est inutile si l'ancienne tâche a été détruite. –

+0

vous pouvez coder onNewIntent (getIntent()); dans onCreate. – oldfeel