Genişletilebilir bildirim oluşturma

Temel bildirimler genellikle bir başlık, metin satırı ve kullanıcının yanıt olarak gerçekleştirebileceğ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, genişletilebilir bildirimler oluşturabilirsiniz.

Başlamak için, Bildirim oluşturma konusunda açıklandığı gibi tüm temel içeriğe sahip bir bildirim oluşturun. Ardından, bir stil nesnesiyle setStyle() çağrısı yapın ve aşağıdaki örneklerde gösterildiği gibi her bir şablona karşılık gelen bilgileri sağlayın.

Büyük resim ekleyin

Bildiriminize resim eklemek için setStyle() adlı alıcıya bir NotificationCompat.BigPictureStyle örneği iletin.

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ış durumdayken (aşağıdaki şekilde gösterildiği gibi) küçük resim olarak görünmesi için setLargeIcon() yöntemini çağırın ve resmi iletin. Ardından, BigPictureStyle.bigLargeIcon() numaralı telefonu arayıp null ileterek bildirim genişletildiğinde büyük simgenin kaybolmasını sağlayın:

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ş bildirimi gösteren bir resim
Şekil 1. NotificationCompat.BigPictureStyle kullanan bir bildirim.

Büyük bir metin bloğu ekleyin

Metnin, bildirimin genişletilmiş içerik alanında görüntülenmesi 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 kullanarak daraltılmış bildirimi ve genişletilmiş bildirimi gösteren resim
Şekil 2. NotificationCompat.BigTextStyle kullanan bir bildirim.

Gelen kutusu tarzı bildirim oluşturma

Birden fazla kısa özet satırı (ör. gelen e-postalardan snippet'ler) eklemek istiyorsanız bildirime NotificationCompat.InboxStyle uygulayın. Bu, NotificationCompat.BigTextStyle tarafından sağlanan bir kesintisiz metin satırı yerine her biri bir satıra kısaltılan birden fazla içerik metni parçası eklemenize olanak tanır.

Yeni bir satır eklemek için aşağıdaki örnekte gösterildiği gibi addLine() numarasını en fazla altı kez çağırın. Altıdan fazla satır eklerseniz yalnızca ilk altı tanesi 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 şekilde görünür:

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

Bildirimde bir görüşmeyi gösterme

İstediğiniz sayıda kişi arasında sıralı mesajlar görüntülemek için NotificationCompat.MessagingStyle uygula. Bu, gönderen adı ve mesaj metnini ayrı olarak işleyerek her mesaj için tutarlı bir düzen sağladığından ve her mesaj birden fazla satır uzunluğunda olabileceğinden mesajlaşma uygulamaları için idealdir.

Yeni bir mesaj eklemek için mesaj metnini, alma zamanını ve gönderenin adını ileterek addMessage() numaralı telefonu arayın. Bu bilgileri aşağıdaki örnekte gösterildiği gibi NotificationCompat.MessagingStyle.Message nesnesi olarak da aktarabilirsiniz:

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 bildirimi gösteren bir resim
Şekil 4. NotificationCompat.MessagingStyle kullanan bir bildirim.

NotificationCompat.MessagingStyle kullanılırken setContentTitle() ve setContentText() için verilen tüm değerler göz ardı edilir.

Görüşmenin üzerinde görünecek bir başlık eklemek için setConversationTitle() numaralı telefonu arayabilirsiniz. Bu, grubun kullanıcı tarafından oluşturulan adı veya belirli bir adı yoksa sohbetteki katılımcıların listesi olabilir. Bire bir sohbetler için görüşme başlığı ayarlamayın. Sistem, görüşmenin bir grup olduğuna dair ipucu olarak bu alanın varlığını kullanır.

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

Bir sohbet görüşmesi için buna benzer bir bildirim oluştururken doğrudan yanıtlama işlemi ekleyin.

Medya denetimleriyle bildirim oluşturma

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

Oluşturucuda ilişkili MediaSession öğenizi belirtin. Bu, Android'in medyanızla ilgili doğru bilgileri göstermesine olanak tanır.

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

Diğer bildirim stillerinden farklı olarak MediaStyle, daraltılmış görünümde de görünecek üç 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 işlem düğmesi dizinlerini setShowActionsInCompactView() hizmetine sağlayın.

Aşağıdaki örnekte, medya denetimleriyle nasıl bildirim 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 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.