Ich habe einen Dienst, der eine Website nach Daten durchsucht und dann dem Benutzer ggf. eine Benachrichtigung gibt.Benachrichtigungen verschwinden, sobald der Dienst beendet wird
Das Problem, das ich habe, ist, dass die Benachrichtigungen verschwinden, sobald der Dienst schließt (was sofort sein könnte). Der folgende Code enthält den gesamten Benachrichtigungscode der App. Ich habe keinen Code eingegeben, um die Benachrichtigungen abzubrechen.
public static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx)
{
Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link));
PendingIntent contentIntent = PendingIntent.getActivity(ctx.getApplicationContext(), 0, notificationIntent, 0);
NotificationManager nm = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx);
Resources res = ctx.getResources();
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.notify_icon)
.setWhen(System.currentTimeMillis())
.setContentTitle(title)
.setContentText(text)
.setAutoCancel(false);
Notification n = builder.getNotification();
nm.notify(notificationID, n);
}
Wenn es einen Unterschied macht (ziemlich sicher, dass es nicht) verwende ich den Anwendungskontext hier.
Meine Dienste werden regelmäßig gestartet, verarbeitet eine Website, benachrichtigt bei Bedarf und schließt dann.
Am Ende meines Dienstes, anstatt nur stopSelf() anzurufen, ich schlafe für 30 oder so Sekunden und dann stopSelf() aufrufen. Dann bleibt die Benachrichtigung für 30 Sekunden und verschwindet dann. Zum Zeitpunkt, zu dem die Benachrichtigungen verschwinden, wird in logcat nichts Relevantes angezeigt.
Ich konnte bisher nur mit ICS testen.
Diese sollte in Ordnung sein. Im Allgemeinen verschwinden Benachrichtigungen nur, wenn Ihre Anwendung gewaltsam beendet wird. Ich würde erwarten, dass etwas zusammenbricht. Es wäre interessant zu sehen, welchen Code du benutzt, um "zu schlafen" (sagst du dem Thread eigentlich, dass er schlafen soll?) Und welcher Thread läuft. Es wäre auch interessant zu versuchen, den 30s Schlaf für das Experiment zu entfernen und zu sehen, ob das gleiche Verhalten passiert. – kabuko
Wo ist der Code, der die Benachrichtigungen abbricht, wenn Sie welche haben? Auch FYI sollten Sie nicht direkte Zeichenfolgen wie android.intent.action verwenden. * Dies ist ein CONSTANT, der in der Intent-Klasse verfügbar ist. @ user1531605 – JoxTraex
Wenn der Dienst aufgefordert wird zu stoppen, "bevor" eine Benachrichtigung gesendet wird, d. h. in derselben Code-Ausführungskette, wird die Benachrichtigung gelöscht. –