2013-04-23 20 views
18

Burada diğer tüm AUTO-CANCEL çalışmayan sorulara baktım ve hepsi yapmadığım hatalar gibi görünüyor. Her ikiAndroid: Uygulamanızda arka planda çalışan bir bildirim AUTO-CANCEL kullanma

builder.setAutoCancel(true); 

ve

Notification notif = builder.build(); 
notif.flags |= Notification.FLAG_AUTO_CANCEL; 

Ne eserlerini çalıştılar.

Minimum API'm 8 olduğundan, NotificationCompat kullanıyorum. İşte tam kodum. Bu özel bildirimde, bir şey yapmayacağım, çünkü kullanıcının bir şey yapmasına gerek yok.

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
builder.setContentTitle(getString(R.string.app_name) + ": my title"); 
builder.setContentText(message); 
builder.setSmallIcon(R.drawable.notification_icon); 

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.prog_icon); 
builder.setLargeIcon(bitmap); 

builder.setAutoCancel(true); // dismiss notification on user click 

NotificationManager notiManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
notiManager.notify(MY_NOTI_MANAGER_ID, builder.build()); 

Bildirim, yalnızca mükemmel bir şekilde görüntülenir. Bunu temizlemek için hızlıca kaydırabilirsiniz. Ancak basitçe dokunmak bildirimi reddetmez. Sadece yanıyor ve orada kalıyor.

Kodum ile diğerlerinin buraya gönderilenleri arasındaki olası bazı farklar: 1) NotificationCompat kullanıyorum (fark yaratmamalı, ancak bunu daha önce duyduk). 2) Bildirimim basit olduğundan, bir amaç eklemiyorum.

Lütfen içgörüleriniz varsa lütfen bize bildirin.

Düzenleme: Amacım, arka plan uygulamamı ön planda bırakmadan bir bildirimi kapatmaktır.

cevap

24

Eğer bekleyen bir niyet gerekir mi : Burada

çalışır this sample project dan mantığı -görüntüleyen bazı Notification olduğunu.

Android - notification manager, having a notification without an intent adresinde, yürürlükteki etkin uygulamayı bekleyen amacınız olarak alan bir çözüm buldum (böylece, bildirimi kapatmak için kendi etkinliğinizi başlatmak zorunda kalmazsınız).

PendingIntent notifyPIntent = 
    PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0);  
builder.setContentIntent(notifyPIntent); 

O amele:

Sadece (-iptal auto sağ ayarladıktan sonra) kod aşağıdaki iki satırı eklendi. Etkinliğinizin, bildiriminizi tıklatarak kullanıcı tarafından yeniden başlatılmasını istemiyorsanız, bunun en iyi seçeneğiniz olduğunu söyleyebilirim.

+0

Bu doğru ... – superUser

+2

Çözüm iyi, ancak açıklama açık olduğunu düşünüyorum. "Mevcut etkin uygulamayı bekleyen amacınız olarak almaz", büyük olasılıkla boş niyet gönderir ve bildirim tepsisini daraltır. Niyet hiçbir şey yapamadığı için, etkinlik yığınının tepesine düşeriz. –

+0

yep şampiyon gibi çalışıyor .. Çok teşekkürler .. –

6

PendingIntent ve setContentIntent() çağrılarını kaçırıyorsunuz gibi görünüyor. Otomatik iptal çalışmasının gerekli olduğuna inanıyorum. Yani görünüşte

private void raiseNotification(Intent inbound, File output, Exception e) { 
    NotificationCompat.Builder b=new NotificationCompat.Builder(this); 

    b.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL) 
    .setWhen(System.currentTimeMillis()); 

    if (e == null) { 
     b.setContentTitle(getString(R.string.download_complete)) 
     .setContentText(getString(R.string.fun)) 
     .setSmallIcon(android.R.drawable.stat_sys_download_done) 
     .setTicker(getString(R.string.download_complete)); 

     Intent outbound=new Intent(Intent.ACTION_VIEW); 

     outbound.setDataAndType(Uri.fromFile(output), inbound.getType()); 

     b.setContentIntent(PendingIntent.getActivity(this, 0, outbound, 0)); 
    } 
    else { 
     b.setContentTitle(getString(R.string.exception)) 
     .setContentText(e.getMessage()) 
     .setSmallIcon(android.R.drawable.stat_notify_error) 
     .setTicker(getString(R.string.exception)); 
    } 

    NotificationManager mgr= 
     (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

    mgr.notify(NOTIFY_ID, b.build()); 
    } 
+1

Teşekkür ederiz. Ben de bu çözümü buldum: PendingIntent notifyPendingIntent = PendingIntent.getActivity (getApplicationContext(), 0, new Intent(), 0); \t buer.setContentIntent (notifyPendingIntent); Bu çözüm burada yayınlandı: http: // stackoverflow.com/questions/7040742/android-bildirim-manager-having-a-bildirim olmadan-bir-niyet – BeccaP

4

Hai sevgili dostum sen İptal Edilemeyen belirli süre bildirim (kullanıcılar için iptal edilemeyen) göstermek istiyorsanız ve bunu kullanabilirsiniz bundan sonra bunu (müzik çalar gibi) açıkça gerekir.

mNotificationBuilder .setSmallIcon(android.R.drawable.btn_plus); 
mNotificationBuilder .setContentTitle("My notification"); 
mNotificationBuilder .setContentText("Notificattion From service"); 
mNotificationBuilder .setLights(0xFF0000FF, 500, 500); 

Notification note = mNotificationBuilder.build(); 
note.flags = Notification.FLAG_ONGOING_EVENT; // For Non cancellable notification 
mNotificationManager.notify(NOTIFICATION_ID, note); 
İlgili konular