Notification s'ouvre à l'activité, retour bouton enfoncé, l'activité principale est ouverte?
La meilleure façon dont je peux décrire mon problème est le suivant:
- Un avis est créé au démarrage (avec un
BroadcastReceiver
). - Mon application principale activité est ouverte et la maison est enfoncé (l'application est toujours en cours d'exécution en arrière-plan jusqu'à ce que le système de la ferme).
- J'ai tirer vers le bas la barre d'état et appuyez sur la notification précédemment créé au démarrage.
- Une certaine activité, différente de la principale, est commencé.
- J'appuie sur le bouton de retour et l'activité principale est affichée.
Comment puis-je empêcher que la dernière étape? Ce que je veux avec le bouton de retour pour revenir là où j'étais, qui est l'écran d'accueil (le bureau avec tous les widgets et les icônes d'application). Mon application principale activité était censé être en cours d'exécution sur le fond, pourquoi est-il appelé avec le bouton de retour?
Dans le cas où il est pertinent, à mon code pour créer une notification va comme ceci:
public void createNotification(int notifyId, int iconId, String contentTitle, String contentText) {
Intent intent = new Intent(mContext, NewNoteActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(AgendaNotesAdapter.KEY_ROW_ID, (long)notifyId);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, notifyId, intent, 0);
Notification notification = new Notification(iconId, contentTitle, 0);
notification.setLatestEventInfo(mContext, contentTitle, contentText, contentIntent);
mNotificationManager.notify(notifyId, notification);
J'ai essayé d'ajouter un couple de plus de drapeaux combinaisons de intent
mais aucun d'eux n'a résolu mon problème... des Suggestions?
OriginalL'auteur Ricardo Amaral | 2011-09-30
Vous devez vous connecter pour publier un commentaire.
Votre problème en suivant les étapes que je sais de votre question est
1.Créer une notification après le démarrage complet
2.L'activité principale sera d'appel au démarrage
3.vous avez appuyé sur la touche home, donc l'activité principale sera arrêté mais ne sera pas détruire
4.Vous cliquez sur la notification de barre d'état de sorte que votre
application will be resume
de sorte que vous avez déjà de l'activité principale dans votre pile de retour et de notification permettra de créer de nouvelles activités, comme vous l'avez mentionné dans votre question NewNoteActivity activité sera poussée sur la pile de retour.DONC, à cette étapeyou have two activities in back stack
5.vous avez appuyé sur la touche retour de sorte que
last activity will be destroy
et votremain activity will be resume
Mais vous voulez aller à la page d'accueil de l'écran.De sorte que le Votre problème en suivant les étapes que je sais de votre question est
1.Créer une notification après le démarrage complet
2.L'activité principale sera d'appel au démarrage
3.vous avez appuyé sur la touche home, donc l'activité principale sera arrêté mais ne sera pas détruire
4.Vous cliquez sur la notification de barre d'état de sorte que votre
application will be resume
de sorte que vous avez déjà de l'activité principale dans votre pile de retour et de notification permettra de créer de nouvelles activités, comme vous l'avez mentionné dans votre question NewNoteActivity activité sera poussée sur la pile de retour.DONC, à cette étapeyou have two activities in back stack
5.vous avez appuyé sur la touche retour de sorte que
last activity will be destroy
et votremain activity will be resume
Mais vous voulez ouvrir la page d'accueil de l'activité lorsque vous avez appuyé sur le bouton de retour de NewNoteActivity activité.Donc la solution est que lorsque vous avez appuyé sur la touche retour de votre NewNoteActivityactivity de commencer l'activité principale de nouveau avec
Intent.FLAG_ACTIVITY_CLEAR_TOP
drapeau, de sorte que votre principale activité sera de recréer et recevezonNewIntent()
méthode de sorte que l'on peut obtenir drapeau et vous pouvez terminer l'activité principalepar exemple
Maintenant que vous avez à mettre en œuvre
onNewIntent()
méthode dans votre activité PrincipaleSur la touche retour enfoncée à partir NewNoteActivity de l'activité de votre activité Principale sera d'appel
onNewIntent()
méthode donc, dans cette méthode, vous devez aller chercher le drapeau de la variable qui est passée de NewNoteActivity activité.Si vous obtenez le drapeau et si c'est vrai, alors tout juste d'en terminer l'activité Principale de sorte que vous obtiendrez l'écran d'Accueil.MODIFIER
Vous dites que vous avez tout de l'activité à partir de A,B,ou C est ouvert et vous avez appuyé sur la touche retour de sorte que cette activité sera fermé.Si vous avez une seule activité à pile à ce moment votre demande sera fermé signifie que vous obtiendrez l'écran d'accueil.Mais si vous avez plus d'une activité et vous avez appuyé sur la touche retour, vous avez au moins une activité dans la pile et maintenant, vous cliquez sur la notification, afin que cela va ouvrir une nouvelle activité associée à votre notification, afin que cette activité sera poussé que sur la pile de retour.Maintenant, si vous avez appuyé sur la touche retour de votre dernière activité qui est associée à votre notification sera fermé si vous n'avez pas modifier onBackPressed() la méthode dans cette activité, et puis il va vérifier la pile de retour si toute activité dans la pile de retour de sorte que l'activité sera reprise ou si il n'y a pas d'activité dans la pile de retour, alors votre demande sera fermé et vous obtiendrez l'écran d'accueil
J'ai dû modifier ma réponse maintenant, vous pouvez vérifier.
Qui semble comme il pourrait travailler, mais aussi, on dirait un sale hack. Tout ce que tu dis a du sens, mais je ne suis pas heureux avec une telle solution, et je ne vais pas l'utiliser. Mais je crois qu'il fonctionne et permet de résoudre le problème, je suis donc en le marquant comme accepté de répondre.
En fait, j'allais pour mettre en œuvre votre solution, mais ensuite j'ai réalisé qu'il ne fonctionne pas exactement comme je le veux. Dans l'exemple ci-dessus que vous utilisez
Main.class
, que si la pile en haut de l'activité est autre que "Principal"? Disons que j'ai les activités A, B et C. Si l'une de ces activités sont ouvertes et j'appuyez sur le bouton et ensuite je clique sur la notification et j'appuyez sur le bouton encore une fois, je ne sais pas qui de la A, B et C des activités a été ouvert à appliquer la solution de contournement que vous avez posté. Toute autre solution? Comment voulez-vous résoudre ce problème?pour ce commentaire que j'avais mis ma réponse par l'édition de ma réponse.
OriginalL'auteur Dharmendra
Pour qui qui pourraient encore avoir besoin de réponse. Il semble que ce est ce que vous voulez atteindre:
http://developer.android.com/guide/topics/ui/notifiers/notifications.html#NotificationResponse
Votre situation est - La configuration d'une activité régulière PendingIntent
Voir toutes les étapes dans le lien. Fondamentalement, vous devez:
1. Définir
Activity
hiérarchie dans AndroidManifest.xml2. Créer un pile de retour basé sur la
Intent
qui démarre leActivity
:J'ai rencontré un problème lorsque j'ai cliqué sur la notification et de l'ouvrir à l'activité, et d'aller à mon écran d'accueil, puis après quelques secondes, j'ai envoyer une notification de nouveau je n'ai plus de recevoir une notification de nouveau. En utilisant le code ci-dessus m'aide. Merci!
OriginalL'auteur im_crash
Eu le même problème.
Ce qui a fonctionné pour moi a été mise dans le manifeste de l'attribut suivant à l'activité lancée par la notification:
android:taskAffinity=""
Essentiellement, cela sépare l'affinité de la notification de l'activité à partir de l'activité principale et le système d'exploitation ne ressens pas le besoin de "retour" à l'activité principale, mais renvoie simplement à tout ce qui était là avant, par exemple, le "bureau".
OriginalL'auteur Shoom Kloom
Je utiliser cette solution dans mes applications.
Remplacer onBackPressed (dans votre activité acheminé à partir de la notification) et vérifiez si votre application est en cours de pile ou pas. si non, alors commencer à la racine de votre activité. L'utilisateur peut toujours naviguer à partir de la racine de votre activité. C'est ce que je fais dans mes applications
OriginalL'auteur junto
Cela fonctionne pour moi. essayez ceci:
OriginalL'auteur Khushbu Sharma