So stornieren Sie eine Vordergrund-Dienst über die Meldung (streichen entlassen) oder löschen Sie alle Benachrichtigungen?
Ich bin derzeit auf der Schaffung einer Vorder-Dienst mit einer Meldung, erscheint in der notification bar wenn der Dienst gestartet wird. Wenn der Dienst beendet wird, wird die Meldung abgewiesen. Meine Frage ist, gibt es eine Möglichkeit, den Dienst zu beenden, wenn "lösche alle Benachrichtigungen" oder verwerfen der Benachrichtigung (wischen) Auftritt?
Aktualisiert, um die Umsetzung der Mitteilung:
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;
}
- Haben Sie einen Blick auf dieses Beispiel von Google: github.com/googlesamples/android-ActiveNotifications. Es zeigt, wie zu hören ist, entlassen Benachrichtigung, sowie eine ganze Gruppe von Benachrichtigungen.
- Soweit ich weiß, kann man nicht 'erstellen' ein Vordergrund-service ohne eine Benachrichtigung. Android benötigt, da Sie nicht wollen, dass Sie die Laufenden Dienste an hinter der Szene, ohne dass der Benutzer es zu wissen. Entfernen Sie Benachrichtigungen, wenn Ihre Aktivität zerstört worden ist und Ihren Dienst im Vordergrund, rechtfertigt eine Benachrichtigung, Sie können nicht einfach kündigen. Abbrechen die Meldung kann nur erfolgen durch aufheben der Vorder-Dienst selbst über den Aufruf '.stopForeground(true)' wird der Boolesche parameter gibt an, ob Sie möchten, stoppen Sie das Vordergrund-zusammen mit der Benachrichtigung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Benutzer nicht erlaubt, zu streichen entfernt eine Benachrichtigung generiert eine laufende Vordergrund service.
Daher
stopForeground(false)
ersten, die es ermöglicht die Benachrichtigung geklaut werden entfernt, indem der Benutzer danach (zumindest auf Lollipop+). Für pre-Lutscher haben, müssen Sie möglicherweisestopForeground(true)
, die Haltestellen in der Vordergrund und entfernt die Benachrichtigung, dann re-issue der Benachrichtigung mitnotificationManager.notify(yourNotificationID, yourNotificationObject)
, so dass Ihre Meldung ist sichtbar, aber swipeable.Entscheidend, die notification-Objekt mit einem löschen der Absicht, die ausgelöst wird, wenn der Benutzer Eingaben Weg.
wo
deletePendingIntent
ist so etwas wieWenn der Benutzer klaut Sie Weg, die Absicht, mit seiner extra an den service. Mit der gelieferten extra in
onStartCommand
, also überprüfen, dassintent != null
,intent.getExtras() != null
, dann extrahieren Sie den Wert aus der extras-bundle gegebensomeKey
, und wenn es passtsomeIntValue
sind, dann rufen SiestopSelf()
.Die Meldung einer foregraound-Dienst kann nicht deaktiviert werden. Die einzige Möglichkeit ist das beenden des Dienstes.
So, ich glaube, das Problem, das Sie lösen wollen, wird nie passieren.
dieser code funktioniert bei mir:
und Sie sollten Ihren return-Wert der onStartCommand, STRAT_STICKY wird, starten Sie den Dienst neu.
Davon aus, dass Ihr
Notification
ist so aufgebaut, dass es geräumt werden, diedeleteIntent
aufgerufen werden soll, wenn es deaktiviert ist. Man könnte diesgetBroadcast()
PendingIntent
, die auf eine manifest-registriertBroadcastReceiver
aufruftstopService()
.Notification
, und Kommentar hier zurück zu lassen Sie mich wissen, dass du es gepostet hast.FLAG_NO_CLEAR
, und ich sehe nicht, in der Quelle, woNotification.Builder
ist die EinstellungFLAG_NO_CLEAR
, also Android behandeln mussFLAG_FOREGROUND_SERVICE
bedeutetFLAG_NO_CLEAR
. BTW, du musst nichtFLAG_FOREGROUND_SERVICE
sich selbst -startForeground()
bedeutet das für Sie, pro die docs. Ich habe immerFLAG_NO_CLEAR
mich auf diese, und ich vermutete (fälschlich, offenbar), dass das verlassen es aus, würde das Ergebnis in einer normalenNotification
, wo Sie vielleicht verlieren Vordergrund Berechtigungen wenn der Benutzer Sie gelöscht.Es ist ein dismissIntent Sie können in die Meldung, die Sie erstellen, obwohl ich dachte, Vordergrund Service-Benachrichtigungen können nicht deaktiviert werden?
dismissintent
? Wo ist der API-spec?