2016-05-02 21 views
7

Hangouts gibi çalışmak için yerel bildirimler almaya çalışıyorum. Yeni bir metin mesajı alındığında bildirimlerin başlamasını istiyorum. Ancak iki veya daha fazla okunmamış bildirim olduğunda, Android bildirim çubuğunda bir özet bildirimi görüntülemek istiyorum. Gruplar aracılığıyla bildirim isteme gibi görünüyor ve bir grup özeti eklediğinde here açıklandığı gibi çalışmalıdır. Aşağıdaki kod Android 5.0 ve 5.1 sürümlerinde benim için işe yarıyor gibi görünüyor, ancak Android 6.0'da yerel bildirim, o grup için bir özet bildirimi mevcut olduğunda, yukarı görünümde alarm vermiyor/görüntülenmiyor. Bu yüzden sadece ilk bildirim görüntülenir.Android grup bildirimi, özet bildirimi ekledikten sonra alarm vermiyor (Android 6.0)

public class MainActivity extends AppCompatActivity { 

private Button _button = null; 
final static String GROUP_KEY_EMAILS = "group_key_emails"; 
private int messageNum = 1; 

private void CreateNotification() { 
    // Build the notification, setting the group appropriately 
    Notification headsUpNotification = new NotificationCompat.Builder(this) 
      .setContentTitle("Title") 
      .setContentText("New Message" + messageNum) 
      .setSmallIcon(R.drawable.pngreceivedtextmessage) 
      .setGroup(GROUP_KEY_EMAILS) 
      .setPriority(Notification.PRIORITY_HIGH) 
      .setDefaults(Notification.DEFAULT_ALL) 
      .build(); 

    // Issue the notification 
    NotificationManagerCompat notificationManager = 
      NotificationManagerCompat.from(this); 
    notificationManager.notify(messageNum, headsUpNotification); 

    Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), 
      R.drawable.pngreceivedmessageicon); 

    if(messageNum > 1) { 
     // Create a summary notification since we have more than 1 
     Notification summaryNotification = new NotificationCompat.Builder(this) 
       .setContentTitle("Summary") 
       .setNumber(messageNum) 
       .setSmallIcon(R.drawable.pngreceivedtextmessage) 
       .setLargeIcon(largeIcon) 
       .setGroup(GROUP_KEY_EMAILS) 
       .setGroupSummary(true) 
       .build(); 

     notificationManager.notify(0, summaryNotification); 
    } 

    messageNum++; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    _button = (Button) findViewById(R.id.button); 
    _button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      CreateNotification(); 
     } 
    }); 
} 

SDK 23'ü hedefliyorum ve pek çok farklı kombinasyonu denedim ancak hiçbir şey işe yaramıyor. Bir kimsenin bir özet bildirimi nasıl oluşturacağını bilen var mı?

+0

Android M için çalışma zamanı izinlerini mi sordunuz? –

+0

İzin gerektiren bir şey yaptığımı düşünmedim. Hangi izinlere ihtiyacım olacak? – Alex

cevap

3

Android 6.0'da, bildirimler/özet bildirimlerinin nasıl görüntülendiği konusunda küçük bir değişiklik var. Bir sürü bildirimi tekrar tekrar göndermeye devam ederseniz, ardışık bildirimler arasında çok kısa bir süre varsa, bildirim sistemi bir baş üstü ekranı göstermez. içerde ikinci bildirim oluşturucu bu kodu eklemek öncelikle bu doğrulamak için

(bu o kadar yüksek öncelikli ve alarm göstermek amacıyla kodunuzda eksikti) deyimi ise:

.setPriority(Notification.PRIORITY_HIGH) 
.setDefaults(Notification.DEFAULT_ALL) 

ve daha sonra her birkaç saniyeden sonra bildirimde bulunulmasını sınayın (önceki başlık bildirimi sona erdikten sonra birkaç saniye bekleyin). Eğer bu doğru cevap verirseniz, her bildirim için uyarı ekranı ile birlikte uyarı ekranını görmelisiniz.

Bildirimi tekrar tekrar göndermeye başlarsanız ve çok hızlı bir şekilde yukarı açılmıyorsa. Sadece 1-2 dakika bekleyin ve sonra tekrar yayınlayın, sonra yukarı-yukarı gösterecektir.

+0

Teşekkürler, her seferinde yeni bir bildirim metni oluşturmak için kod olarak değiştirdim, ancak yukarı bildirim hala çalışmıyor. Önceliği ve varsayılanları özet bildirime eklerseniz, özet bildirim baş yukarı bildirim olarak gösterilir. İstediğim bu değil, yalnızca özetini güncellemek istiyorum, ancak normal "Yeni Mesaj" bildirimini baş harf olarak görüntülüyorum. – Alex

+0

özetini oluşturun ilk – conca

1

Benim Tahminen notificationManager.notify(0, summaryNotification); çağrılırken zaman notificationId olarak kodlanmış 0 yeniden çünkü olmasıdır - Sistem yerine artımlı id ekleyerek daha da güncellemeleri

deneyin görmezden olabilir: sizin MainActivity sınıfta

  1. bir alan ekleme private static int lastNotificationId = 0;
  2. notificationManager.notify(MainActivity.lastNotificationId++, summaryNotification);

Kendimi kodunuzda denemedim, ancak geçmişte benzer bir sorunla karşılaştığımı hatırlıyorum, bu şekilde çözüldü.

+0

Teşekkürler ama özet bildirim için her defasında yeni bir kimlik oluşturmak sorunu çözmedi. Bildirim çubuğunda, bir öncekini manuel olarak iptal etmemle zorlayan yeni bir ayrı bildirim oluşturmayı sonlandırır.Ayrıca, önceden uyarı bildirimi için yeni bir bildirim kimliği oluşturuyorum. – Alex

+0

Daha sonra, kullanıcı tarafından manuel iptalden kaçınabilirsiniz ve en son yayımlamadan önce 'notificationManager.cancel (lastNotificationId)' ile koddan iptal edebilirsiniz. Bildirim çubuğunda olmasını istediğiniz doğru konuma yerleştirilmiş mi? Şimdi kafaları düzgün bir şekilde tetikliyor mu? (eski olanın hala var olması hariç). –

+0

Hayır, uyarı bildirimi hala doğru tetiklenmiyor. – Alex

İlgili konular