2010-08-13 18 views
28

Bildirim mesajları oluşturmak için birçok örnek okudum. Neyi başarmak istediğim, bildirimin bir widget tarafından gerçekleştirileceğidir, kullanıcı tarafından tıklandığında kendisini temizlemek için tıkladığında bildirim niyetini istiyorum. Geri dönmek için bir etkinliğim yok. Amaçlarımın bildirimi sadece açıkça bildirecek, başka bir şey değil. Peki, kendini temizleyen/iptal eden bir niyetin kodu ne olurdu? Aşağıdaki kod, bir düğme tarafından başlatılan bir etkinliktir (düğme kodu dahil değildir) bildirim, bir arka plan hizmeti tarafından tetiklenir.Android Bildirimi kendi kendine temizlemek niyetinde

CharSequence title = "Hello"; 
CharSequence message = "Hello, Android!"; 
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
final Notification notification = new Notification(R.drawable.icon,"A New Message!",System.currentTimeMillis()); 

notification.defaults=Notification.FLAG_ONLY_ALERT_ONCE+Notification.FLAG_AUTO_CANCEL; 
Intent notificationIntent = new Intent(this, AndroidNotifications.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0); 

notification.setLatestEventInfo(AndroidNotifications.this, title,message, pendingIntent); 
notificationManager.notify(NOTIFICATION_ID, notification); 

Teşekkür

cevap

1

Bunun bir arka plan Service için Notification 'ın Intent noktasına sahip olmaktır yapmanın görebilirsiniz tek yolu. Bu Hizmet başlatıldığında, NotificationManager.cancel(int id) kullanarak verilen Notification temizler. Service daha sonra kendini durduracaktır. Güzel değil, uygulanması kolay olmayacak, ancak bunu yapmanın başka bir yolunu bulamıyorum.

+0

Kodu iptal etmek için bildirimi iptal etmek isterseniz, iptal çağrısında 'NOTIFICATION_ID' kullanın. – Pentium10

+0

Evet, bunu bir düğmeden çağıracağım, ancak kullanıcının bildirimi seçtiğinde bunu koddan çağırmak istiyorum. – John

+0

Bana göre çözüm, ancak biraz dağınık (ek hizmetin yazılması). Fakat Hizmette argüman olarak bildirme kimliğinin verilebileceği Niyet Çağrısına erişimim var. –

73

Kontrol dışarı FLAG_AUTO_CANCEL

Bit kullanıcı tarafından tıklandığında bildirim iptal edilmelidir eğer ayarlanmalıdır bayrakları alana bitsel-atmasına.

DÜZENLEME:

notification.flags |= Notification.FLAG_AUTO_CANCEL; 
+0

Kodum zaten FLAG_AUTO_CANCEL kullanıyor, ancak bildirim tıklandığında gitmiyor. – John

+17

Kodunuz yanlış kullanır (varsayılan değerler alanına girer), bu şekilde bitsel olarak veya bayraklar alanında şunları yapmanız gerekir: 'bildirim.flags | = Notification.FLAG_AUTO_CANCEL;' – Pentium10

+2

Teşekkürler notification.flags | = Notification.FLAG_AUTO_CANCEL; Çalışmış. – John

19

notification.flags yerine notification.defaults içinde bayrakları ayarlayın.

Örnek:

notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL; 
1
/** 
     Post a notification to be shown in the status bar. 
     Obs.: You must save this values somewhere or even pass it as an extra through Intent to use it later 
*/ 
notificationManager.notify(NOTIFICATION_ID, notification); 

/** 
     Cancel a previously shown notification given the notification id you've saved before 
*/ 
notificationmanager.cancel(NOTIFICATION_ID); 
+0

bildirimi, bildirimi() bildirdikten hemen sonra iptal eder. – Aryo

10

sonra sadece kendi nesnenin metodu setAutoCancel

NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
builder.setAutoCancel(true); 

Bazı adamlar setAutoCancel() olmadıkları rapor edildi çağrı NotificationCompat.Builder (android.support.v4 bir parçası) kullanıyorsanız onlar için çalışın, böylece bu şekilde de deneyebilirsiniz:

builder.build().flags |= Notification.FLAG_AUTO_CANCEL; 
+0

ans için teşekkürler :) – Nevaeh

1

sorunu çözmek gerekir setContentIntent kullanma: Örneğin

.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 

:

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentTitle("title") 
     .setAutoCancel(true) 
     .setContentText("content") 
     .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(0, mBuilder.build()); 

Genellikle ilgili içeriğe yönlendirmek isteyebilirsiniz ve böylece yerini alabilir '(yeni niyet)' başka bir şeyle.

İlgili konular