Genişletilebilir bildirim oluşturma

Temel bildirimler genellikle bir başlık, bir satır metin ve kullanıcının yanıt olarak gerçekleştirebileceği işlemler içerir. Daha fazla bilgi sağlamak için bu belgede 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 bölümünde açıklandığı gibi tüm temel içerikleri içeren bir bildirim oluşturun. Ardından, bir stil nesnesiyle setStyle() yöntemini ç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() öğesine bir NotificationCompat.BigPictureStyle örneği iletin.

var notification =
    NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(com.example.compose.snippets.R.drawable.ic_logo)
        .setContentTitle("Title")
        .setContentText("Content text")
        .setStyle(
            NotificationCompat.BigPictureStyle()
                .bigPicture(bitmapImage)
        )
        .build()

Resmin yalnızca bildirim daraltıldığında küçük resim olarak görünmesini sağlamak için (aşağıdaki resimde gösterildiği gibi) setLargeIcon() yöntemini çağırın ve resmi bu yönteme iletin. Ardından BigPictureStyle.bigLargeIcon() yöntemini çağırın ve null değerini iletin. Böylece bildirim genişletildiğinde büyük simge kaybolur:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Title")
    .setContentText("Content text")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigPictureStyle()
            .bigPicture(bitmapImage)
            .bigLargeIcon(null as Bitmap?)
    )
    .build()

Daraltılmış bir bildirim ve mavi bir resim içeren genişletilmiş bir bildirim
Şekil 1. NotificationCompat.BigPictureStyle kullanan bir bildirim.

Büyük bir metin bloğu ekleme

Bildirimin genişletilmiş içerik alanında metin göstermek için NotificationCompat.BigTextStyle yöntemini uygulayın:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Sender name")
    .setContentText("Email subject")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigTextStyle()
            .bigText(someVeryLongMessage)
    )
    .build()

BigTextStyle kullanan daraltılmış bir bildirim ve genişletilmiş bir bildirim
Şekil 2. NotificationCompat.BigTextStyle kullanan bir bildirim.

Gelen kutusu tarzında bildirim oluşturma

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

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

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

Sonuç aşağıdaki resme benzer:

Genişletilmiş gelen kutusu tarzı bildirim
Şekil 3. Genişletilmiş gelen kutusu tarzı bildirim.

Görüşmeyi bildirimde gösterme

Herhangi bir sayıda kullanıcı arasında sıralı mesajları görüntülemek için NotificationCompat.MessagingStyle uygulayın. Bu, mesajlaşma uygulamaları için idealdir. Gönderen adını ve mesaj metnini ayrı ayrı işleyerek her mesaj için tutarlı bir düzen sağlar ve her mesaj birden fazla satır uzunluğunda olabilir.

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

val message1 = NotificationCompat.MessagingStyle.Message(
    messages[0].text,
    messages[0].time,
    messages[0].sender
)
val message2 = NotificationCompat.MessagingStyle.Message(
    messages[1].text,
    messages[1].time,
    messages[1].sender
)
notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.MessagingStyle(Person.Builder().setName("Me").build())
            .addMessage(message1)
            .addMessage(message2)
    )
    .build()

Mesajlaşma tarzında bir bildirim
Şekil 4. NotificationCompat.MessagingStyle kullanan bir bildirim.

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

Görüşmenin üzerinde görünen bir başlık eklemek için setConversationTitle() yöntemini ç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. Bire bir sohbetler için görüşme başlığı ayarlamayın. Sistem, bu alanın varlığını görüşmenin bir grup görüşmesi olduğuna dair bir ipucu olarak kullanır.

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

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

Medya kontrolleri içeren bir 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 değerinizi belirtin. Bu sayede Android, medyanızla ilgili doğru bilgileri gösterebilir.

En fazla beş simge düğmesi görüntülemek için addAction() yöntemini beş kez çağırın. Albüm kapağını ayarlamak için setLargeIcon() yöntemini çağırın.

Diğer bildirim stillerinden farklı olarak 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 de olanak tanır. Bunu yapmak için işlem düğmesi dizinlerini setShowActionsInCompactView() yöntemine iletin.

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    // Show controls on lock screen even when user hides sensitive content.
    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
    .setSmallIcon(com.example.compose.snippets.R.drawable.play)
    // Add media control buttons that invoke intents in your media service
    .addAction(R.drawable.previous, "Previous", null /* Add valid intent */) // #0
    .addAction(R.drawable.pause, "Pause", null /* Add valid intent */) // #1
    .addAction(R.drawable.next, "Next", null /* Add valid intent */) // #2
    // Apply the media style template.
    .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
        .setShowActionsInCompactView(1 /* #1: pause button */))
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(bitmapImage)
    .build()

Medya stiline sahip bir bildirim
Ş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.