Annuler une notification sur supprimer l'application de multitâche panneau
- Je gérer une COURS de notification à partir de mon application (pas de service).
Quand j'ai tuer l'application dans le gestionnaire des tâches avec le bouton "Fin", notification disparaître.
Quand j'ai supprimer l'application de multitâche panneau, l'application est tué, mais notification reste.
Mes questions sont:
- Comment attraper cet événement à une notification claire?
- Ce qui se passe lorsque l'application est supprimée de multitâche panneau? L'Application est détruit, mais le processus de rester en vie? Est-il normal?
Comme une mise à jour:
Toutes mes activités s'étend MyActivity classe (qui s'étend à l'Activité) avec des méthodes:
@Override protected void onCreate(Bundle state) {
super.onCreate(state);
((MyApplication) getApplication()).onActivityCreate(this, state);
}
@Override protected void onDestroy() {
super.onDestroy();
((MyApplication) getApplication()).onActivityDestroy(this);
}
Et mon application s'étend MyApplication classe (qui étend le champ d'Application) avec des méthodes:
private List<Activity> activities = new ArrayList<Activity>();
protected final void onActivityCreate(Activity activity, Bundle state) {
if(activities.isEmpty() && state == null) {
onStart();
}
activities.add(activity);
}
protected final void onActivityDestroy(Activity activity) {
activities.remove(activity);
if(activities.isEmpty() && activity.isFinishing()) {
onExit();
}
}
protected void onStart() {
//some code
}
protected void onExit() {
//some code
notificationManager.cancel(NOTIFICATION_ID);
}
activities
est une liste de toutes les activités en cours d'exécution
Ce n'est pas la plus simple mécanisme, mais j'en ai besoin
Dois-je utiliser un service à la place?
Comme une nouvelle mise à jour:
Dans mon onExit() la méthode, si je me connecte un message de débogage pour savoir ce qui se passe comme ceci:
public void onExit() {
for(int i = 0; i < 100; i++) {
Log.d(TAG, "onExit");
}
}
une petite quantité de journal s'affiche une fois sur deux, pas tous (ex: 13/100)
Donc, je comprends que supprimer l'application de multitâche panneau de force pour tuer application sans attendre près de méthodes, pour terminer correctement... Mais pourquoi ne pas la traiter ?!
Comment puis-je la force pour mettre fin à correctement ?
- Pouvez-vous montrer le code que pour la façon dont vous construisez votre Avis?
- C'est la plus simple possible: de la Notification la notification = nouvelle Notification(...); notificationManager.notify(NOTIFICATION_ID, notification);
- Je tiens à préciser que le problème ne se produit pas lorsque je quitte l'application directement, mais quand je l'ai mis dans le fond et je vide la liste des applications
Vous devez vous connecter pour publier un commentaire.
Tuer les Notifications lors de l'application principale a été tué.
Depuis votre avis et votre application sont traitées dans différents threads de tuer votre application via MultitaskManager ne tuent pas de votre avis. Comme vous l'avez déjà correctement étudié de tuer votre application ne sont pas encore necesarrily résultat dans un onExit() de rappel.
Alors, quelle est la solution?
Vous pourriez commencer un service de votre activité. Un des services spécialisés: ils redémarrer automatiquement si app-processus ont été tué pour une raison quelconque. Donc, il est possible de réutiliser le redémarrage automatique en tuant la notification de la redémarrer.
Étape 1 créer un service qui tue
Simple. Il tue tout simplement une notification lors de la création et a son Classeur spécial.
Etape 2: Ajouter à votre manifeste:
L'ajouter quelque part entre votre <application> balises.
Etape 3: Toujours créer le Service avant fireing la notification, et l'utilisation de la statique notificationid.
Il pourrait prendre un peu de temps jusqu'à ce que le service est redémarré (de 1 à 5 sec), mais elle finit par démarrer et de tuer la notification.
startForeground
ne fonctionnera pas non plus. La notification en cours restera si le service est tué.stopForeground(true)
doit être appelé pour la notification d'être rejeté, ce qui est impossible lorsque le service est tué.La capacité à faire glisser les applications de la récente liste des applications est introduit dans le Sandwich à la Crème Glacée (API 14).
Avec la même version d'Android, nous avons reçu une méthode spéciale "onTaskRemoved()" dans "android.app.De Service". Elle est appelée lorsque l'application est supprimée de la liste des applications récentes.
Donc, il suffit de remplacer "onTaskRemoved()" méthode pour parvenir à vos exigences si vous rencontrez un service en cours d'exécution.
E. g.:
Ou tout simplement écrire & start service spécial pour gérer la même.
Il est recommandé de créer une classe étend le champ d'Application et d'enregistrer l'activité des rappels, dont l'appel lorsque vous fermez l'application de multitâche panneau.
}
J'ai le même problème que moi, cependant, j'ai réussi à le résoudre
C'est ce que j'ai fait
Si vous maintenez le bouton de la maison pendant 2-3 secondes, puis le multipane vient au premier plan, alors que notre activité est actuellement en pause. Nous avons donc besoin de l'amener au premier plan, d'abord et ensuite supprimer la notification d'application et enfin quitter l'application
destroyActivityCompletely fonction pour supprimer l'application de notification et ensuite de tuer l'activité. Cela fonctionne si l'activité est excitée de multipane et etc.
Je voulais fermer tous mes App notifications,retirer l'insigne des icônes sur Déconnexion, retiré de récente de la liste des applications . donc, pour
de service de démarrage au lanceur d'activité(je suis de la création de notification à partir d'ici) que
où
PushNotificationService
est mon Androidservice
à l'intérieur de laquelle j'aicette ligne dans
OnTaskRemoved(Intent rootIntent)
a fait le touroù 0 dans
notificationManager.Cancel(0);
, c'est le local de notification id que nous avons mis au moment de la construction de la notification.Je Vous suggère d'utiliser Deepti solution (https://stackoverflow.com/a/28584405/619673) qui a été
Cependant, il oublie de mentionner une chose. Si Votre connexion le service était par appel
bindService()
,onTaskRemoved()
ne sera pas déclenché. Pour gérer cela, Vous devez vous connecter avec service par appelstartService()
comme dans l'exemple ci-dessous:Une fois que Vous l'appelez, Vous pourrez attraper
onTaskRemoved()
.Rien ne vous empêche d'appeler les deux méthodes
startService()
et quelque part plus loinbindService()
.J'ai été en se basant sur la solution Service: onTaskRemoved pas appelé si commencé avec bindService