Question

Dans Android, je définis une ExampleActivity d'activité.

Quand mon application a été lancée, une instance de cette A-activité a été créée, par exemple, il est A. Lorsque l'utilisateur clique sur un bouton dans A, une autre instance de B-activité, B a été créé. Maintenant, la pile de tâches est B-A, avec B au sommet. Ensuite, l'utilisateur clique sur un bouton B, une autre instance d'activité économique C, et C a été créé. Maintenant, la pile de la tâche est C-B-A, avec C au sommet.

Maintenant, lorsque l'utilisateur clique sur un bouton C, je veux l'application d'apporter un au premier plan, à savoir faire de A à être en haut de la pile de tâches,. A-C-B

Comment puis-je écrire le code pour y arriver?

Était-ce utile?

La solution

Vous pouvez essayer FLAG_ACTIVITY_REORDER_TO_FRONT (le document décrit exactement ce que vous voulez)

Autres conseils

La meilleure manière que je trouvais de le faire était d'utiliser la même intention que l'écran d'accueil Android utilise -. L'application Launcher

Par exemple:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

De cette façon, quelle que soit l'activité dans mon paquet a été le plus récemment utilisé par l'utilisateur est ramené à l'avant à nouveau. J'ai trouvé cela utile dans l'utilisation PendingIntent de mon service pour obtenir l'utilisateur à mon application.

Voici un code-exemple de la façon dont vous pouvez le faire:

Intent intent = getIntent(getApplicationContext(), A.class)

Cela fera en sorte que vous ne disposez que d'un exemple d'une activité sur la pile.

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}

FLAG_ACTIVITY_REORDER_TO_FRONT : Si elle est définie dans une intention passée à Context.startActivity (), ce drapeau provoquera l'activité lancée pour être portée à l'avant de sa pile de l'histoire de la tâche si elle est déjà en cours d'exécution.

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

Je pense qu'une combinaison de drapeaux Intent devrait faire l'affaire. En particulier, Intent.FLAG_ACTIVITY_CLEAR_TOP et Intent.FLAG_ACTIVITY_NEW_TASK.

Ajoutez ces drapeaux à votre intention avant d'appeler startActvity.

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

Remarque Votre launchmode de homeactivity doit être single_task

En général, je pense que cette méthode de gestion de l'activité n'est pas recommandée. Le problème avec réactivant une activité deux étapes dans la pile est que cette activité a probablement été tué. Mon conseil en se rappeler l'état de vos activités et de les lancer avec startActivity ()

Je suis sûr que vous avez vu cette page, mais pour votre commodité, ce lien

Si vous souhaitez apporter une activité au sommet de la pile lorsque vous cliquez sur une notification, vous devrez peut-être effectuer les opérations suivantes pour faire le travail de FLAG_ACTIVITY_REORDER_TO_FRONT:

La solution pour moi cela était de faire un récepteur de radiodiffusion qui écoute pour diffuser les actions que la notification se déclenche. Donc, en gros:

  1. Notification déclenche une action de diffusion avec un supplément le nom de l'activité de lancement.

  2. récepteur de radiodiffusion prises quand la notification est cliquée, crée alors une intention de lancer cette activité en utilisant le drapeau FLAG_ACTIVITY_REORDER_TO_FRONT

  3. L'activité est portée au sommet de la pile d'activité, pas de doublons.

si vous utilisez le "Google Cloud message" pour recevoir les notifications push avec classe "PendingIntent", le code suivant affiche la notification dans la barre d'action seulement.

En cliquant sur la notification aucune activité sera créée, la dernière activité active est restaurée en conservant l'état actuel sans problème.

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top