32 votes

Alternative à Intent.FLAG_ACTIVITY_CLEAR_TASK

J'ai deux applications : App-B lance App-A. Si l'utilisateur lance l'application B à partir de l'application A, j'appelle finish sur l'application A et je n'ai pas de problème.

Si l'utilisateur passe directement à l'application B à partir du tiroir d'applications ou en appuyant longuement sur le bouton d'accueil, j'applique la méthode ci-dessous qui efface d'abord la tâche dans l'application A avant d'appliquer tous les extras. Cela a l'effet désiré mais ne fonctionne que sur l'API 11. Sur les API inférieures, la nouvelle tâche dans l'APP-A ne change pas et les extras putExtra n'ont aucun effet. Toute alternative à FLAG_ACTIVITY_CLEAR_TASK ? pour API <=10 ?

        Intent i = new Intent("com.App-A");
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

Merci

Jason

14voto

Warpzit Points 11150

Le nouveau IntentCompat aurait dû aider sur ce point, mais apparemment le drapeau est ignoré pour les API inférieures à 11.

Pour utiliser IntentCompat, procédez comme suit :

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK) ;

2voto

user1249590 Points 37

Ceci fonctionnera correctement

i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
               Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

1voto

Tom Mulcahy Points 981

La meilleure documentation que j'ai trouvée pour ces drapeaux Intent est ici : http://blog.akquinet.de/2010/04/15/Android-activites-and-tasks-series-intent-flags/

Je ne comprends pas ce que vous essayez de faire, mais avez-vous essayé FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET ?

1voto

Matt Clark Points 5017

Je comprends peut-être mal ce que vous demandez, mais est-ce que lorsque vous lancez B, vous voulez que A soit tué ?

En A, ajoutez ceci à la balise d'activité dans le manifeste :

android:noHistory=true

Ainsi, l'activité sera supprimée de la mémoire dès qu'elle perdra le fil.

0voto

David Wasser Points 23169

J'ai encore beaucoup de mal à comprendre le problème mais j'aimerais vous aider à le résoudre. Étant donné que les commentaires n'autorisent que 600 caractères et qu'ils ne sont pas bien formatés, je vais plutôt créer une réponse, car je suis sûr qu'ensemble, nous pourrons résoudre ce problème.

J'aimerais pouvoir reproduire votre problème. Pour ce faire, j'ai créé 2 applications : AppA et AppB . L'application A a une seule activité appelée ActivityA et l'AppB a une seule activité appelée ActivityB . Les deux sites ActivityA et ActivityB utiliser android:launchMode="singleTask" .

ActivityA a un bouton qui lance l'application B et se termine, comme ceci :

    Intent intent = new Intent("de.sharpmind.example.AppB");
    intent.putExtra("extra", "launched from AppA");
    startActivity(intent);
    finish();

ActivityB a un bouton qui lance l'AppA comme ceci :

    Intent intent = new Intent("de.sharpmind.example.AppA");
    intent.putExtra("extra", "launched from AppB");
    startActivity(intent);

Tout cela fonctionne comme je l'espère. AppA et AppB s'exécutent dans des tâches différentes. Le "extra" est correctement vu dans le onCreate() les méthodes de chaque application.

Pouvez-vous m'en dire plus sur votre problème ? Comment puis-je reproduire exactement votre problème ? Vous avez écrit :

Sur les API inférieures, la nouvelle tâche dans APP-A ne changera pas et les extras putExtra n'auront aucun effet.

Qu'est-ce que vous entendez par là ? Où mettez-vous les extras et où les obtenez-vous et qu'attendez-vous qu'il se passe ?

Par ailleurs, quel est le launchMode de votre AppB ?

De plus, lorsque vous rencontrez ce problème, y a-t-il d'autres activités dans la pile de tâches de l'AppA ?

Veuillez fournir plus d'informations, soit dans votre question initiale, soit ici dans les commentaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X