Bildirime tıkladıktan sonra Android bildirimi kaybolmuyor


133

Bir bildirimle ilgili bazı sorunlar varsa, bildirim çubuğunda göstermek istiyorum. Bildirim bayrağını bildirime ayarlasam da Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELtıkladıktan sonra kaybolmuyor. Neyi yanlış yaptığıma dair bir fikrin var mı?

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    int icon = R.drawable.icon;
    CharSequence tickerText = "Ticker Text";
    long time = System.currentTimeMillis();

    Notification notification = new Notification(icon, tickerText, time);
    notification.flags = Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCEL; 

    Context context = getApplicationContext();
    CharSequence contentTitle = "Title";
    CharSequence contentText = "Text";
    Intent notificationIntent = new Intent(this, SilentFlipConfiguration.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    mNotificationManager.notify(1,notification);

Yanıtlar:


305

Bina yaparken Notificationtarafından NotificationBuildersize kullanabilirsiniz notificationBuilder.setAutoCancel(true);.


2
Peki, Notification'ı mNotificationManager.notify(1,notification);kullanarak ve NotificationBuilder'ı kullanarak hangi farklılıklar bildirim oluşturur mNotificationManager.notify(1, mBuilder.build());? Teşekkürler.
Yohanes AI

9
Bu cevap kabul edilmeli, mevcut android tasarım doktrini ile daha uyumlu
jmaculate

Bu cevap doğrudur. Birinin işe yaradığını kabul etti, ancak her zaman değil. GCM'de (veya ne kullanıyor olursanız olun) yığın bildirimler olduğunda sorun vardır. Bildirim sunucusuna ping gönderdiğinizde, çok sayıda bildirimle geri döner ve bazen yalnızca bildirim görünümünü döndürür.
Nikola Milutinovic

5
notificationBuilder.setAutoCancel(true);benim için çalışmıyor. Bekleyen Niyetimin önüne koymalı mıyım?
Kairi San

129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

Belgelerden:

Kullanıcı tarafından tıklandığında bildirimin iptal edilmesi gerekiyorsa ayarlanması gereken bayraklar alanına bit şeklinde veya yazılacak bit


3
Bu doğru cevap değil. sınıfın değil, sınıfın bir Notification.DEFAULT_LIGHTSparçasıdır . Uygun ayarlayıcılar için cevabıma bakın. Notification.defaultsNotification.flags
Darcy

notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; bu yöntem çalışıyor, teşekkürler synic.
Ravikumar11

1
Bu yanıttaki kod, bildirim sesinin birden çok kez çalınmasına neden oldu. Diğer cevaplara bakın.
yasaklama-jeomühendislik

27
// Uses the default lighting scheme
notification.defaults |= Notification.DEFAULT_LIGHTS;

// Will show lights and make the notification disappear when the presses it
notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;

1
Android dokümanları inceledim. Bayrakların ne zaman kullanılması gerektiğini tam olarak anlayamıyorum. Neden sadece notification.defaults = notification.DEFAULT_LIGHTS ışıkları göstermek için yeterli değil. Çünkü titreşim ve ses bayraksız çalışır.
Ashwin

NotificationBuilder, NotificationCompat.Builder mBuilder = new NotificationCompat.Builder (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle ("New Tweet") .setContentText ("" + count + "tweet var") kullanıyorum ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Joseph



1

Bayrak Bildirimini kullanın.FLAG_AUTO_CANCEL

Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, pendingIntent);

// Cancel the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;

ve uygulamayı başlatmak için:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

Intent intent = new Intent(context, App.class);

PendingIntent pendingIntent = PendingIntent.getActivity(context, intent_id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

0

Bir bildirimi kaldır

Aşağıdakilerden biri olana kadar bildirimler görünür durumda kalır:

  1. Kullanıcı bildirimi reddeder.
  2. Kullanıcı bildirime tıklar ve bildirimi oluşturduğunuzda setAutoCancel () öğesini çağırırsınız.
  3. Belirli bir bildirim kimliği için cancel () öğesini çağırırsınız. Bu yöntem aynı zamanda devam eden bildirimleri de siler.
  4. Daha önce verdiğiniz tüm bildirimleri kaldıran cancelAll () öğesini çağırırsınız.
  5. SetTimeoutAfter () kullanarak bir bildirim oluştururken bir zaman aşımı ayarlarsanız, sistem belirtilen süre geçtikten sonra bildirimi iptal eder. Gerekirse, belirtilen zaman aşımı süresi dolmadan önce bir bildirimi iptal edebilirsiniz.

Daha fazla ayrıntı için bkz: https://developer.android.com/training/notify-user/build-notification?hl=en

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.