2012-07-17 9 views
7

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.

+0

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

+0

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

+0

Wenn der Dienst aufgefordert wird zu stoppen, "bevor" eine Benachrichtigung gesendet wird, d. h. in derselben Code-Ausführungskette, wird die Benachrichtigung gelöscht. –

Antwort

2

Sie scheinen zu vergessen, Entwicklerhandbuch zuerst zu überprüfen. Sehen Sie hier http://developer.android.com/guide/topics/ui/notifiers/notifications.html und suchen Sie nach FLAG_ONGOING_EVENT und FLAG_NO_CLEAR Flags.

Ich konnte bisher nur mit ICS testen.

Deshalb sind Simulatoren sehr nützlich. Versuch es. Es ist Teil von SDK.

+0

Ich habe es gelesen, das sind nicht was ich will. Benachrichtigungen sollten über die Schaltfläche "Benachrichtigungen löschen" gelöscht werden können, damit FLAG_NO_CLEAR nicht hilft. Und das ist kein andauerndes Ereignis. Aus den Dokumenten "Es sollte nicht festgelegt werden, wenn diese Benachrichtigung sich auf etwas bezieht, das zu einem bestimmten Zeitpunkt passiert ist, wie ein verpasster Anruf." Genau das ist eine Beziehung zu etwas, das zu einem bestimmten Zeitpunkt passiert ist. Obwohl als eine Nebenbemerkung, habe ich mit diesen Flags nur für den Fall getestet und hatte die gleichen Ergebnisse. Die Benachrichtigungen verschwanden immer noch, als der Dienst geschlossen wurde. – user1531605

+0

Haben Sie Ihren Code auf pre 4.x androids überprüft ?. Emulator genügt. –

+0

Veröffentlichen Sie den Quellcode Ihres Dienstes, nur die relevanten, wie die Erstellung und die Zerstörung. – JoxTraex

4

Der von Ihnen angegebene Code funktioniert. Ich habe es sowohl von einer Aktivität als auch von einem Service auf jb getestet und die Benachrichtigung bleibt erhalten, wenn die Komponenten gestoppt werden. Ich habe sogar überprüft, dass ich den Prozess beenden kann und die Benachrichtigung bleibt. Versuchen Sie, die App zu entfernen und zu überprüfen, ob das Problem weiterhin besteht. Überprüfen Sie speziell, ob Sie die Benachrichtigung nicht versehentlich abbrechen.

1

Bitte versuchen Sie es auf die alte Weise auf dem gleichen Gerät und uns sagen, ob es die gleiche Weise verhält:

private static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) { 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNotificationManager = (NotificationManager) ctx.getSystemService(ns); 
    Notification notification = new Notification(R.drawable.notify_icon, title, System.currentTimeMillis()); 
    notification.flags = Notification.FLAG_AUTO_CANCEL; 
    PendingIntent contentIntent; 
    Bundle bundle = new Bundle(); 
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link)); 
    contentIntent = PendingIntent.getActivity(ctx, notificationID, 
       notificationIntent, 0); 
    notification.setLatestEventInfo(ctx, title, text, 
      contentIntent); 
    mNotificationManager.notify(notificationID, notification); 
} 
Verwandte Themen