Comment amener une activité de premier plan (en haut de la pile)?
Dans Android, j'ai défini une activité ExampleActivity.
Que ma candidature a été lancé, une instance de cette Activité a été créé, dire que c'est A
.
Lorsque l'utilisateur clique sur un bouton dans A
, une autre instance de l'Activité B, B, a été créé. Maintenant, la tâche de la pile est B-A, avec B au sommet. Ensuite, l'utilisateur a cliqué sur un bouton sur B, une autre instance de C-Activité, et C a été créé. Maintenant, la tâche de la pile est C-B-A, C au dessus.
Maintenant, lorsque l'utilisateur clique sur un bouton sur le C, je veux de l'application à apporter à l'avant-plan, c'est à dire faire Une pour être au top de la tâche de la pile, A-C-B.
Comment puis-je écrire le code pour le faire?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer ce
FLAG_ACTIVITY_REORDER_TO_FRONT
(le document décrit exactement ce que vous voulez)startActivity()
pour lancer ActivityA, même si vous définissezFLAG_ACTIVITY_SINGLE_TOP
il va encore créer un nouvelle instance de ActivityA.FLAG_ACTIVITY_SINGLE_TOP
seulement empêche la création d'une nouvelle instance de si vous essayez de lancer une activité qui est déjà sur le haut de la pile. Dans ce cas, ActivityA n'est pas au sommet de la pile, afin de Android crée une nouvelle instance.(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP)
pour effacer toute l'histoire après unActivity
.onNewIntent
?La meilleure façon que j'ai trouvé à faire c'était d'utiliser la même intention que l'écran d'accueil Android utilise - le Lanceur d'applications.
Par exemple:
De cette façon, quelle que soit l'activité dans mon colis a été récemment utilisé par l'utilisateur est ramené à l'avant à nouveau. J'ai trouvé ce utile dans l'utilisation de mon service PendingIntent pour obtenir à l'utilisateur de retourner à mon application.
Activity
au sein du groupe de la pile. OP dit clairement qu'il veut aller de l'ActivityA
à partir du bas de la pile vers le haut de la pile (c'est à dire: il veut réorganiser la ActivityA à l'avant de la tâche de la pile). Cette réponse ne sera pas le faire. Cette réponse est une réponse à la question "Comment puis-je amener mon application (tâche pile) à partir de l'arrière-plan au premier plan?" est complètement différent de la question de l'OP question d'origine.Voici un code d'exemple de la façon dont vous pouvez le faire:
Ce sera assurez-vous que vous avez seulement un exemple d'une activité sur la pile.
FLAG_ACTIVITY_REORDER_TO_FRONT:
Si dans une Intention passé au Contexte.startActivity(), ce drapeau sera la cause de la lancé de l'activité pour être porté à l'avant de sa tâche, l'histoire de la pile si elle est déjà en cours d'exécution.
Je pense qu'une combinaison de
Intent
drapeaux devrait faire l'affaire. En particulier,Intention.FLAG_ACTIVITY_CLEAR_TOP
etIntent.FLAG_ACTIVITY_NEW_TASK
.Ajouter ces drapeaux à votre intention avant d'appeler
startActvity
.i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
Note de Votre homeactivity launchmode devrait ê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 la réactivation d'une activité de deux Marches plus bas dans La Pile, c'est que cette activité a vraisemblablement été tué. Mon conseil en souvenir de 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 confort ce lien
Si vous voulez exercer une activité pour le sommet de la pile lorsque l'on clique sur une Notification alors vous devrez peut-être effectuer les opérations suivantes pour faire de la FLAG_ACTIVITY_REORDER_TO_FRONT travail:
La solution pour moi était de faire un récepteur de radiodiffusion à l'écoute de la diffusion des actions que la notification des déclencheurs. Donc en gros:
Notification déclenche une action émise avec un supplément le nom de l'activité de lancement.
Récepteur de radiodiffusion attrape ce lorsque la notification est cliqué, puis crée une intention de lancer cette activité à l'aide de la FLAG_ACTIVITY_REORDER_TO_FRONT drapeau
Activité est porté à la tête de l'activité de pile, pas de doublons.
si vous êtes à l'aide de la "Google Cloud Message" recevoir des notifications push avec "PendingIntent" de la classe, le code suivant affiche la notification dans la barre d'action seulement.
Cliquant sur la notification aucune activité ne sera créé, la dernière activité est restauré en conservant é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!