Comment annuler un de premier plan de services de l'aide de la notification (balayez vers la rejeter) ou effacer toutes les notifications?
Je suis en train de créer un premier plan avec un service de notification qui s'affiche dans la barre de notification lorsque le service démarre. Si le service s'arrête, la notification rejette. Ma question est, est-il un moyen d'arrêter le service lorsque "effacer toutes les notifications" ou un rejet de la notification (balayer) se produit?
Mis à jour pour inclure la mise en œuvre de la notification:
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.d(CLASS, "onStartCommand service started.");
if (getString(R.string.service_start_action) == intent.getAction())
{
Intent intentForeground = new Intent(this, ServiceMain.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendIntent = PendingIntent.getActivity(getApplicationContext(), 0, intentForeground, 0);
Notification notification;
Notification.Builder builder = new Notification.Builder(getApplicationContext())
.setSmallIcon(android.R.drawable.btn_star)
.setTicker("Service started...")
.setContentIntent(pendIntent)
.setDefaults(Notification.DEFAULT_ALL)
.setOnlyAlertOnce(true)
.setOngoing(false);
notification = builder.build();
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
startForeground(SERV_NOTIFY, notification);
player.start();
}
else
{
Log.d(CLASS, "onStartCommand unable to identify acition.");
}
return START_STICKY;
}
Jetez un oeil à cet exemple de Google: github.com/googlesamples/android-ActiveNotifications. Il montre comment écouter pour un licencié de notification, ainsi que tout un groupe de notifications.
Comme je sais que vous ne peut pas "créer" un premier plan de service sans la création d'une notification. Android nécessite ce qu'ils ne veulent pas vous en cours d'exécution des services de derrière la scène à l'insu de l'utilisateur. Retrait d'une notification lorsque votre activité a été détruit et le fonctionnement de votre service dans le premier plan de bons de souscription d'une notification, vous ne pouvez pas simplement l'annuler. L'annulation de la notification ne peut être fait que par l'annulation de la de premier plan de services par le biais de l'appel".stopForeground(true)', le paramètre booléen indique si vous souhaitez vous arrêter au premier plan avec la notification.
Comme je sais que vous ne peut pas "créer" un premier plan de service sans la création d'une notification. Android nécessite ce qu'ils ne veulent pas vous en cours d'exécution des services de derrière la scène à l'insu de l'utilisateur. Retrait d'une notification lorsque votre activité a été détruit et le fonctionnement de votre service dans le premier plan de bons de souscription d'une notification, vous ne pouvez pas simplement l'annuler. L'annulation de la notification ne peut être fait que par l'annulation de la de premier plan de services par le biais de l'appel".stopForeground(true)', le paramètre booléen indique si vous souhaitez vous arrêter au premier plan avec la notification.
OriginalL'auteur d.moncada | 2012-10-13
Vous devez vous connecter pour publier un commentaire.
L'utilisateur n'est pas autorisé à coup l'écart d'une notification générée par un cours de premier plan de services.
Donc,
stopForeground(false)
en premier, ce qui permet à la notification, pour être glissée à l'écart par l'utilisateur par la suite (au moins sur Lollipop+). Pour le pré-Sucette, vous pourriez avoir àstopForeground(true)
, qui s'arrête au premier plan et supprime la notification, puis de le ré-émettre la notification avecnotificationManager.notify(yourNotificationID, yourNotificationObject)
, de sorte que votre avis est visible, mais swipeable.De manière cruciale, de définir l'objet de notification avec une suppression de l'intention qui est déclenché lorsque l'utilisateur effectue.
où
deletePendingIntent
est quelque chose commeLorsque l'utilisateur effectue de loin, l'intention avec son supplémentaire est envoyé au service. Gérer la livraison supplémentaire à l'intérieur de
onStartCommand
, c'est à dire vérifier queintent != null
,intent.getExtras() != null
, puis d'en extraire la valeur de l'bundle extras donnésomeKey
, et si elle correspondsomeIntValue
, puis d'appelerstopSelf()
.OriginalL'auteur Kevin Lee
La notification d'un foregraound service ne peut pas être effacé. Le seul moyen est d'arrêter le service.
Donc, je crois que le problème que vous voulez résoudre, ne se produira jamais.
OriginalL'auteur Luis
En supposant que votre
Notification
est mis en place pour lui permettre d'être effacé, ledeleteIntent
doit être invoquée lorsqu'elle est désactivée. Vous pourriez la mettre à unegetBroadcast()
PendingIntent
, pointant vers un manifeste enregistréBroadcastReceiver
que les appelsstopService()
.Modifier votre question, postez le code de création de la
Notification
, et le commentaire de revenir ici pour me faire savoir que vous l'avez posté.mis à jour pour inclure la Notification de la mise en œuvre.
Hmmm... eh Bien, vous n'êtes pas de réglage
FLAG_NO_CLEAR
, et je ne vois pas dans la source oùNotification.Builder
est le réglage deFLAG_NO_CLEAR
, donc Android doit traiterFLAG_FOREGROUND_SERVICE
comme impliquantFLAG_NO_CLEAR
. BTW, vous n'avez pas à réglerFLAG_FOREGROUND_SERVICE
vous-même --startForeground()
fait pour vous, par la documentation. J'ai toujours misFLAG_NO_CLEAR
moi-même sur ces questions, et je suppose (à tort apparemment) que le laisser désactivé normaleNotification
, où vous risquez de perdre des privilèges de premier plan si l'utilisateur effacé.Merci pour l'aide, de sorte qu'il semble que ce comportement n'est pas autorisé par avis de service. Je pense que je vais ajouter un "disparaître" bouton à l'intérieur de la notification elle-même pour arrêter le service.
OriginalL'auteur CommonsWare
ce code fonctionne pour moi:
et vous définissez la valeur de retour de onStartCommand, STRAT_STICKY va redémarrer votre service.
OriginalL'auteur cmnewfan
Il y a un dismissIntent vous pouvez définir dans la notification que vous créez, si j'ai pensé au premier plan des notifications de Service ne peut pas être effacée?
dismissintent
? Où est l'API spec?NotificationCompat.Builder#setDeleteIntent(...)
Je ne vois pas dismissIntent n'importe où dans l'api.
Est-ce une réponse ou une question?
OriginalL'auteur dnkoutso