Je sais, il y a plusieurs questions de ce type mais j'ai tout essayé et ça ne marche toujours pas.
Ok, pour mon application; J'ai une activité. Dans cette activité, il y a 4 onglets, et le quatrième contient une liste et un bouton d'enregistrement. Quand je pousse l'enregistrement, il y a un écouteur GPS qui commence. Après avoir obtenu une nouvelle valeur gps, il l'enfonce dans la liste.
Cela fonctionne jusqu'à présent!
Si je clique sur le bouton d'accueil, il fonctionne toujours, si je le presser alors. Il reprend cette activité avec l'onglet spécifique ouvert et la liste contient toujours les listitems et l'écouteur gps est toujours actif.
Cela fonctionne aussi bien!
Maintenant, je voulais ajouter une notification, qui montre le nombre de valeurs gps de la liste en tant que .number. À chaque nouveau signal GPS, il met à jour l'icône de notification avec le nouveau numéro. Ce n'est pas un problème, mais l'action de cliquer sur la notification déconnecte totalement mon application.Notification CV Activité
Le code actuel ressemble à ceci:
public void callNotify(String text) {
notif = new Notification();
Intent contentIntent = new Intent(this, tabactivity.class);
contentIntent.putExtra("fid", this.specialvalue);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notif.icon = R.drawable.icon;
notif.setLatestEventInfo(this, getString(R.string.app_name), text,
PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
notif.ledARGB = Color.RED;
notif.ledOnMS = 200;
notif.ledOffMS = 200;
notif.flags = Notification.FLAG_SHOW_LIGHTS
| Notification.FLAG_ONGOING_EVENT
| Notification.FLAG_ONLY_ALERT_ONCE;
notif.number = notifyNumber;
mNotificationManager.notify(notifyNumber, notif);
}
public void updateNotify(String text) {
notifyNumber++;
notif.number = (int) (notifyNumber/2);
Intent contentIntent = new Intent(this, tabactivity.class);
contentIntent.putExtra("fid", this.specialvalue);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notif.setLatestEventInfo(this, getString(R.string.app_name), text,
PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
mNotificationManager.cancel((notifyNumber - 2));
mNotificationManager.notify(notifyNumber, notif);
}
Ainsi, le UpdateNotify() est appelée sur un nouveau signal GPS. Et le callNotify() est le premier, avant qu'il ne démarre l'écouteur gps. Et, oui, le notifyNumber/2 était mon intention, parce que je travaille avec ce nombre plus loin.
Si je le compile comme ceci, et que je clique sur la Notification, cela ouvre une NOUVELLE tabactivité sur le premier onglet. Si je clique alors, je reçois beaucoup d'erreurs (la base de données est toujours ouverte, nullpointers et d'autres choses). Je pense que parce que ça commence une nouvelle tabactivité et que l'autre est encore ouverte, parce que je peux voir que l'auditeur GPS fonctionne toujours.
Donc, ce que je veux, c'est que je peux faire ce qui suit: J'ouvre mon application, allez à la tabactivité, ouvrez l'onglet 4, cliquez sur Enregistrer. Si je clique dessus alors, il devrait cacher l'application, aussi, si je clique juste sur le bouton d'accueil. Mais il y a une notification. Si je clique sur celui-ci, il devrait juste montrer à nouveau l'activité cachée et c'est tout. Alors, qu'est-ce que je fais de mal ici? Je pensais que les drapeaux FLAG_ACTIVITY_CLEAR_TOP et FLAG_ACTIVITY_SINGLE_TOP devraient résoudre le problème?
Eh bien, en fait je sais, pourquoi sauter sur le premier onglet. La tabactivité commence généralement au premier onglet, mais le quatrième onglet a cette liste gps. Donc pour moi ist logiquement, que c'est l'ouverture de la tabactivité deux fois. Parce que les données initiales de la liste et d'autres choses ne sont pas chargées à ce moment-là. Donc, les drapeaux ont tort? Je ne comprends pas en quelque sorte ... –
Oh attends ... ça a l'air de marcher, si j'utilise juste FLAG_ACTIVITY_SINGLE_TOP et pas les deux. Ok, si c'était l'erreur, j'ai complètement mal compris les docs. Pardon! –