Genişletilebilir bildirim oluşturma

Temel bildirimler genellikle bir başlık, bir metin satırı ve kullanıcının yanıt olarak yapabileceği işlemleri içerir. Daha fazla bilgi sağlamak için bu dokümanda açıklandığı gibi çeşitli bildirim şablonlarından birini uygulayarak büyük ve genişletilebilir bildirimler oluşturabilirsiniz.

Başlamak için Bildirim oluşturma bölümünde açıklandığı gibi tüm temel içerikleri içeren bir bildirim oluşturun. Ardından, bir stil nesnesi ile setStyle() işlevini çağırın ve aşağıdaki örneklerde gösterildiği gibi her şablona karşılık gelen bilgileri sağlayın.

Büyük resim ekleme

Bildiriminize resim eklemek için setStyle()'a NotificationCompat.BigPictureStyle örneği gönderin.

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setStyle(NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setStyle(new NotificationCompat.BigPictureStyle()
               .bigPicture(myBitmap))
        .build();

Resmin yalnızca bildirim daraltılmışken küçük resim olarak görünmesi için aşağıdaki şekilde gösterildiği gibi setLargeIcon() işlevini çağırın ve resme iletin. Ardından, bildirim genişletildiğinde büyük simgenin kaybolması için BigPictureStyle.bigLargeIcon() yöntemini çağırın ve null parametresini iletin:

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setLargeIcon(myBitmap)
        .setStyle(NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap)
                .bigLargeIcon(null))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setLargeIcon(myBitmap)
        .setStyle(new NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap)
                .bigLargeIcon(null))
        .build();
Daraltılmış bir bildirimi ve mavi resim içeren genişletilmiş bir bildirimi gösteren resim
Şekil 1. NotificationCompat.BigPictureStyle kullanan bir bildirim.

Büyük bir metin bloğu ekleme

Bildirimin genişletilmiş içerik alanında metin görüntülemek için NotificationCompat.BigTextStyle uygulayın:

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setStyle(NotificationCompat.BigTextStyle()
                .bigText(emailObject.getSubjectAndSnippet()))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setStyle(new NotificationCompat.BigTextStyle()
                .bigText(emailObject.getSubjectAndSnippet()))
        .build();
BigTextStyle kullanan daraltılmış bir bildirimi ve genişletilmiş bir bildirimi gösteren resim
Şekil 2. NotificationCompat.BigTextStyle kullanan bir bildirim.

Gelen kutusu tarzında bildirim oluşturma

Gelen e-postalardan alınan snippet'ler gibi birden fazla kısa özet satırı eklemek istiyorsanız bir bildirime NotificationCompat.InboxStyle uygulayın. Bu sayede, NotificationCompat.BigTextStyle tarafından sağlanan tek bir kesintisiz metin satırı yerine, her biri tek satıra kesilmiş birden fazla içerik metni parçası ekleyebilirsiniz.

Yeni bir satır eklemek için aşağıdaki örnekte gösterildiği gibi addLine() işlevini altı kez çağırın. Altıdan fazla satır eklersanız yalnızca ilk altı satır görünür.

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.baseline_email_24)
        .setContentTitle("5 New mails from Frank")
        .setContentText("Check them out")
        .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.logo))
        .setStyle(
                NotificationCompat.InboxStyle()
                .addLine("Re: Planning")
                .addLine("Delivery on its way")
                .addLine("Follow-up")
        )
        .build()

Java

Notification notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.baseline_email_24)
        .setContentTitle("5 New mails from Frank")
        .setContentText("Check them out")
        .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.logo))
        .setStyle(
                NotificationCompat.InboxStyle()
                .addLine("Re: Planning")
                .addLine("Delivery on its way")
                .addLine("Follow-up")
        )
        .build();

Sonuç aşağıdaki gibi görünür:

Genişletilmiş gelen kutusu tarzı bir bildirimi gösteren resim
Şekil 3. Gelen kutusu tarzında genişletilmiş bir bildirim.

Bir ileti dizisini bildirimde gösterme

İstediğiniz sayıda kullanıcı arasında sıralı mesajlar görüntülemek için NotificationCompat.MessagingStyle seçeneğini uygulayın. Gönderen adını ve mesaj metnini ayrı olarak ele alarak her mesaj için tutarlı bir düzen sağladığı ve her mesaj birden fazla satır uzunluğunda olabileceği için bu yöntem mesajlaşma uygulamaları için idealdir.

Yeni bir mesaj eklemek için addMessage() işlevini çağırın. Bu işlevde mesaj metnini, mesajın alındığı zamanı ve gönderenin adını belirtin. Bu bilgileri aşağıdaki örnekte gösterildiği gibi NotificationCompat.MessagingStyle.Message nesnesi olarak da iletebilirsiniz:

Kotlin

val message1 = NotificationCompat.MessagingStyle.Message(
        messages[0].getText(),
        messages[0].getTime(),
        messages[0].getSender())
val message2 = NotificationCompat.MessagingStyle.Message(
        messages[1].getText(),
        messages[1].getTime(),
        messages[1].getSender())
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(
                NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build()

Java

NotificationCompat.MessagingStyle.Message message1 =
        new NotificationCompat.MessagingStyle.Message(messages[0].getText(),
                                                      messages[0].getTime(),
                                                      messages[0].getSender());
NotificationCompat.MessagingStyle.Message message2 =
        new NotificationCompat.MessagingStyle.Message(messages[1].getText(),
                                                      messages[1].getTime(),
                                                      messages[1].getSender());

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build();
Mesajlaşma tarzında bir bildirimi gösteren resim
Şekil 4. NotificationCompat.MessagingStyle kullanan bir bildirim.

NotificationCompat.MessagingStyle kullanılırken setContentTitle() ve setContentText() için verilen değerler yoksayılır.

İleti dizisinin üzerinde görünen bir başlık eklemek için setConversationTitle() işlevini çağırabilirsiniz. Bu, grubun kullanıcı tarafından oluşturulan adı veya belirli bir adı yoksa görüşmedeki katılımcıların listesi olabilir. Sistem, bu alanın varlığını görüşmenin grup olduğunun bir ipucu olarak kullandığından bire bir sohbetler için görüşme başlığı ayarlamamaya çalışın.

Bu stil yalnızca Android 7.0 (API düzeyi 24) ve sonraki sürümleri çalıştıran cihazlarda geçerlidir. Uyumluluk kitaplığı (NotificationCompat) kullanıldığında, daha önce gösterildiği gibi MessagingStyle içeren bildirimler otomatik olarak desteklenen genişletilmiş bildirim stiline geçer.

Sohbet görüşmesi için bu gibi bir bildirim oluştururken doğrudan yanıt işlemi ekleyin.

Medya kontrolleri içeren bildirim oluşturma

Medya oynatma kontrollerini ve izleme bilgilerini görüntülemek için MediaStyleNotificationHelper.MediaStyle simgesini uygulayın.

Oluşturucuda ilişkili MediaSession öğenizi belirtin. Bu sayede Android, medyanızla ilgili doğru bilgileri görüntüleyebilir.

Beş adede kadar simge düğmesi görüntülemek için addAction() simgesine beş kez dokunun. Albüm kapağını ayarlamak için setLargeIcon() numaralı telefonu arayın.

Diğer bildirim stillerinin aksine MediaStyle, daraltılmış görünümde de görünen üç işlem düğmesi belirterek daraltılmış boyutlu içerik görünümünü değiştirmenize olanak tanır. Bunu yapmak için setShowActionsInCompactView() için işlem düğmesi dizinlerini sağlayın.

Aşağıdaki örnekte, medya kontrolleri içeren bir bildirimin nasıl oluşturulacağı gösterilmektedir:

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        // Show controls on lock screen even when user hides sensitive content.
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setSmallIcon(R.drawable.ic_stat_player)
        // Add media control buttons that invoke intents in your media service
        .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
        .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
        .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
        // Apply the media style template.
        .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button \*/))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        // Show controls on lock screen even when user hides sensitive content.
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setSmallIcon(R.drawable.ic_stat_player)
        // Add media control buttons that invoke intents in your media service
        .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
        .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
        .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
        // Apply the media style template.
        .setStyle(new MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button */))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build();
Medya stilinde bir bildirimi gösteren resim
Şekil 5. MediaStyleNotificationHelper.MediaStyle kullanan bir bildirim.

Ek kaynaklar

MediaStyle ve genişletilebilir bildirimler hakkında daha fazla bilgi için aşağıdaki referanslara bakın.