Genişletilebilir bildirim oluşturma

Temel bildirimler genellikle bir başlık, bir 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 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çeriklerin yer aldığı bir bildirim oluşturun. Ardından, bir stil nesnesiyle 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 bir resim ekleme

Bildiriminize resim eklemek için NotificationCompat.BigPictureStyle örneğini setStyle()'ye 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()

Aşağıdaki şekilde gösterildiği gibi, bildirimin daraltıldığı sırada resmin yalnızca küçük resim olarak görünmesini sağlamak için setLargeIcon() işlevini çağırın ve resmi bu işleve iletin. Ardından, bildirim genişletildiğinde büyük simgenin kaybolması için BigPictureStyle.bigLargeIcon() çağırın ve null iletin:

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 renkli bir resim içeren genişletilmiş bir bildirim
Şekil 1. NotificationCompat.BigPictureStyle kullanılarak gönderilen 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:

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 kullanılarak daraltılmış ve genişletilmiş bir bildirim
Şekil 2. NotificationCompat.BigTextStyle kullanılarak gönderilen 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 bildirime NotificationCompat.InboxStyle uygulayın. Bu sayede, NotificationCompat.BigTextStyle tarafından sağlanan tek bir sürekli metin satırı yerine, her biri tek satırda kesilmiş birden fazla içerik metni ekleyebilirsiniz.

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

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

Bildirimde görüşme gösterme

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

Yeni bir mesaj eklemek için addMessage() işlevini çağırın ve mesaj metnini, alınma zamanını ve gönderenin adını iletin. 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 kullanılarak gönderilen bildirim.

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

İletişimin üzerinde görünen bir başlık eklemek için setConversationTitle() numarasını arayabilirsiniz. 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ğu ipucu olarak kullandığından bire bir sohbetler için görüşme başlığı ayarlamayın.

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

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

Medya kontrolleri içeren bir bildirim oluşturma

Medya oynatma kontrollerini ve parça bilgilerini göstermek için MediaStyleNotificationHelper.MediaStyle simgesini kullanın.

Oluşturucuda ilişkili MediaSession öğenizi belirtin. Bu sayede Android, medyalarınızla ilgili doğru bilgileri gösterebilir.

Beş simge düğmesi görüntülemek için addAction() işlevini en fazla beş kez çağırın. Albüm kapağını ayarlamak için setLargeIcon() işlevini ç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() öğesine sağlayın.

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 kullanılarak gönderilen bildirim.

Ek kaynaklar

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