Sous Android, j'ai défini une activité ExampleActivity.
Lorsque mon application a été lancée, une instance de cette A-Activity a été créée, disons qu'elle l'est A
. Lorsque l'utilisateur a cliqué sur un bouton dans A
, une autre instance de B-Activity, B a été créée. Maintenant, la pile de tâches est BA, avec B en haut. Ensuite, l'utilisateur a cliqué sur un bouton sur B, une autre instance de C-Activity, et C a été créé. Maintenant, la pile de tâches est CBA, avec C en haut.
Maintenant, lorsque l'utilisateur clique sur un bouton sur C, je veux que l'application amène A au premier plan, c'est-à-dire que A soit en haut de la pile de tâches, ACB.
Comment puis-je écrire le code pour y arriver?
la source
FLAG_ACTIVITY_SINGLE_TOP
pas ici. Lorsque ActivityC est au sommet de la pile et qu'il appellestartActivity()
à lancer ActivityA, même si vous le définissez,FLAG_ACTIVITY_SINGLE_TOP
il créera toujours une nouvelle instance d'ActivityA.FLAG_ACTIVITY_SINGLE_TOP
n'empêche la création d'une nouvelle instance que si vous essayez de lancer une activité qui se trouve déjà en haut de la pile . Dans ce cas, ActivityA n'est pas au sommet de la pile, donc Android crée une nouvelle instance.(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP)
pour effacer n'importe quel historique après une donnéeActivity
.Le meilleur moyen que j'ai trouvé pour le faire était d'utiliser la même intention que celle utilisée par l'écran d'accueil Android - le lanceur d'applications.
Par exemple:
De cette façon, quelle que soit l'activité de mon package qui a été la plus récemment utilisée par l'utilisateur, elle est remise au premier plan. J'ai trouvé cela utile en utilisant PendingIntent de mon service pour ramener l'utilisateur à mon application.
la source
Activity
dans la pile de tâches. OP indique clairement qu'il veut se déplacerActivityA
du bas de la pile vers le haut de la pile (c'est-à-dire: il veut réorganiser ActivityA vers l'avant de la pile de tâches ). Cette réponse ne fera pas cela. Cette réponse est une réponse à la question "Comment faire passer mon application (pile de tâches) de l'arrière-plan au premier plan?" C'est une question complètement différente de la question initiale d'OP.Voici un exemple de code de la façon dont vous pouvez le faire:
Cela garantira que vous n'avez qu'une seule instance d'une activité sur la pile.
la source
FLAG_ACTIVITY_REORDER_TO_FRONT : s'il est défini dans un Intent passé à Context.startActivity (), cet indicateur amènera l'activité lancée à l'avant de la pile d'historique de sa tâche si elle est déjà en cours d'exécution.
la source
Je pense qu'une combinaison de
Intent
drapeaux devrait faire l'affaire. En particulier,Intent.FLAG_ACTIVITY_CLEAR_TOP
etIntent.FLAG_ACTIVITY_NEW_TASK
.Ajoutez ces indicateurs à votre intention avant d'appeler
startActvity
.la source
i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
Remarque Votre mode de lancement homéactivité doit être single_task
la source
En général, je pense que cette méthode de gestion des activités n'est pas recommandée. Le problème avec la réactivation d'une activité deux étapes plus bas dans la pile est que cette activité a probablement été tuée. Mon conseil pour vous souvenir de l'état de vos activités et les lancer avec
startActivity ()
Je suis sûr que vous avez vu cette page mais pour votre commodité, ce lien
la source
Si vous souhaitez placer une activité en haut de la pile lorsque vous cliquez sur une notification, vous devrez peut-être effectuer les opérations suivantes pour que le FLAG_ACTIVITY_REORDER_TO_FRONT fonctionne:
La solution pour moi pour cela était de créer un récepteur de diffusion qui écoute les actions de diffusion que la notification déclenche. Donc en gros:
La notification déclenche une action de diffusion avec en plus le nom de l'activité à lancer.
Le récepteur de diffusion le détecte lorsque l'utilisateur clique sur la notification, puis crée une intention de lancer cette activité à l'aide de l'indicateur FLAG_ACTIVITY_REORDER_TO_FRONT
L'activité est placée en haut de la pile d'activités, pas de doublons.
la source
si vous utilisez le "Message Google Cloud" pour recevoir des notifications push avec la classe "PendingIntent", le code suivant affiche la notification dans la barre d'actions uniquement.
En cliquant sur la notification, aucune activité ne sera créée, la dernière activité active est restaurée en conservant l'état actuel sans problèmes.
Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);
mBuilder.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
Ciao!
la source