Bildirimler, uygulamanız kullanılmadığında uygulamanızdaki etkinliklerle ilgili kısa ve zamanında bilgi sağlar. Bu dokümanda, farklı özellikler. Bildirimlerin Android'de nasıl göründüğüne giriş için Bildirimlere genel bakış başlıklı makaleyi inceleyin. Bildirimleri kullanan örnek kod için Kişiler örnek bulabilirsiniz.
Bu sayfadaki kod
NotificationCompat
AndroidX Kitaplığı'ndan API'ler. Bu API'ler yalnızca kullanılabilen özellikleri eklemenize olanak tanır.
Android'in daha yeni sürümlerinde ise Android'e uyumluluk sağlamaya devam eder.
9 (API düzeyi 28). Ancak satır içi yanıt işlemi gibi bazı özellikler
önceki sürümlerde işlem yapılamaz.
AndroidX Core Kitaplığı'nı ekleme
Android Studio ile oluşturulan çoğu projede gerekli
NotificationCompat
kullanmak için bağımlılıklar varsa, modül düzeyinizin
build.gradle
dosyası şu bağımlılığı içerir:
Eski
dependencies { implementation "androidx.core:core:2.2.0" }
Kotlin
dependencies { implementation("androidx.core:core-ktx:2.2.0") }
Temel bildirim oluşturma
En temel ve en kompakt biçimi, diğer bir deyişle daraltılmış bir bildirim form: Bir simge, başlık ve az miktarda metin içeriği gösterir. Bu bölümünde, kullanıcının dokunarak başlatabileceği bildirimin nasıl oluşturulacağı gösterilir. en az 14 gün sürer.
Bir bildirimin her bölümü hakkında daha fazla ayrıntı için bildirim bölümünü okuyun anatomisi.
Çalışma zamanında istenen izni beyan etme
Android 13 (API düzeyi 33) ve sonraki sürümler, yayınlama için çalışma zamanı iznini destekler muaf olmayan [Ön plan hizmetleri (FGS) bildirimleri dahil]
Uygulamanızın manifest dosyasında beyan etmeniz gereken izin görünüyor aşağıdaki kod snippet'inde:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Çalışma zamanı izinleri hakkında daha fazla bilgi için şuraya bakın: Bildirim çalışma zamanı izni.
Bildirim içeriğini ayarlama
Başlamak için bildirimin içeriğini ve kanalını
NotificationCompat.Builder
nesnesini tanımlayın. Aşağıdaki örnekte
takip etmek için:
setSmallIcon()
tarafından ayarlanan küçük bir simge. Kullanıcıların görebileceği, gerekli olan tek içerik budur.setContentTitle()
tarafından ayarlanan bir başlık.Gövde metni, tarafından ayarlanan
setContentText()
.Bildirim önceliği:
setPriority()
. Öncelik, Android 7.1 ve önceki sürümlerde bildirimin ne kadar müdahaleci olduğunu belirler. Android 8.0 ve sonraki sürümlerde kanal önemini şu şekilde ayarlayın: görebilirsiniz.
Kotlin
var builder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle(textTitle) .setContentText(textContent) .setPriority(NotificationCompat.PRIORITY_DEFAULT)
Java
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle(textTitle) .setContentText(textContent) .setPriority(NotificationCompat.PRIORITY_DEFAULT);
NotificationCompat.Builder
oluşturucusu bir kanal sağlamanızı gerektiriyor
Kimlik. Bu, Android 8.0 (API düzeyi 26) ve
ancak önceki sürümler tarafından yoksayılır.
Varsayılan olarak, bildirimin metin içeriği bir satıra sığacak şekilde kısaltılır. Siz , genişletilebilir bir bildirim oluşturarak ek bilgiler gösterebilir.
Bildiriminizin daha uzun olmasını isterseniz genişletilebilir
bildirimi içeren bir stil şablonu
setStyle()
.
Örneğin, aşağıdaki kod daha geniş bir metin alanı oluşturur:
Kotlin
var builder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Much longer text that cannot fit one line...") .setStyle(NotificationCompat.BigTextStyle() .bigText("Much longer text that cannot fit one line...")) .setPriority(NotificationCompat.PRIORITY_DEFAULT)
Java
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Much longer text that cannot fit one line...") .setStyle(new NotificationCompat.BigTextStyle() .bigText("Much longer text that cannot fit one line...")) .setPriority(NotificationCompat.PRIORITY_DEFAULT);
Diğer büyük bildirim stilleri hakkında daha fazla bilgi edinmek için medya oynatma kontrolleri için Genişletilebilir bir reklam oluşturma bildirimi gönderebilir.
Kanal oluşturma ve kanalın önemini belirleme
Bildirimi Android 8.0 ve sonraki sürümlerde teslim etmeden önce
uygulamanın bildirim kanalına
bir örneği ileterek sisteme
NotificationChannel
-
createNotificationChannel()
.
Aşağıdaki kod, SDK_INT
sürümündeki bir koşul tarafından engellenir:
Kotlin
private fun createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel(CHANNEL_ID, name, importance).apply { description = descriptionText } // Register the channel with the system. val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } }
Java
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system; you can't change the importance // or other notification behaviors after this. NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
Çünkü herhangi bir içeriği yayınlamadan önce bildirim kanalını oluşturmanız Android 8.0 ve sonraki sürümlerde bildirimler almak istiyorsanız, uygulamanız olur olmaz bu kodu yürütün başlar. Mevcut bir bildirim kanalı oluşturmak herhangi bir işlem gerçekleştirmediğinden bu işlevi tekrar tekrar çağırabilirsiniz.
NotificationChannel
oluşturucusu, şunlardan birini kullanan bir importance
gerektirir:
sabit değerleri
NotificationManager
sınıfı. Bu
parametresi, kullanıcıya ait olan herhangi bir bildirim için kullanıcının
. Android 7.1'i desteklemek için önceliği setPriority()
olarak ayarlayın.
ve önceki örnekte gösterildiği gibi.
Bildirim önemini veya önceliğini aşağıdaki örnekte gösterildiği gibi ayarlamanız gerekir ancak sistem, alacağınız uyarı davranışını garanti etmez. İçinde bazı durumlarda sistem, önem düzeyini başka faktörlere bağlı olarak değiştirebilir. ve kullanıcı her zaman belirli bir konu için önem düzeyinin yardımcı olur.
Farklı düzeylerin ne anlama geldiği hakkında daha fazla bilgi edinmek için bildirim önem derecesi seviyeleri hakkında daha fazla bilgi edinin.
Bildirimin dokunma işlemini ayarlama
Her bildirim, genellikle cihazınızdaki bir etkinliği açmak için bir dokunmaya yanıt vermelidir.
uygulamada görünmesini sağlayabilirsiniz. Bunun için içerik amacı belirtin
PendingIntent
ile tanımlanır
ve bunu
setContentIntent()
.
Aşağıdaki snippet'te, bir etkinliği açmak için temel intent'in nasıl oluşturulacağı gösterilmektedir Kullanıcı bildirime dokunduğunda:
Kotlin
// Create an explicit intent for an Activity in your app. val intent = Intent(this, AlertDetails::class.java).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK } val pendingIntent: PendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE) val builder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) // Set the intent that fires when the user taps the notification. .setContentIntent(pendingIntent) .setAutoCancel(true)
Java
// Create an explicit intent for an Activity in your app. Intent intent = new Intent(this, AlertDetails.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) // Set the intent that fires when the user taps the notification. .setContentIntent(pendingIntent) .setAutoCancel(true);
Bu kod
setAutoCancel()
Kullanıcı bildirime dokunduğunda bildirim otomatik olarak kaldırılır.
setFlags()
yöntemi
önceki örnekte gösterildiği gibi kullanıcının beklenen gezinme menüsü korunur.
bildirimi kullanarak uygulamanızı açtıktan sonra daha fazla deneyim Birlikte çalıştığınız
başladığınız etkinliğin türüne bağlı olarak kullanabilirsiniz.
şu:
Özel olarak bildirime verilen yanıtlar için mevcut olan bir etkinlik. Kullanıcının normal uygulama kullanımı sırasında bu etkinliğe gitmesi için bir neden yoktur. Bu nedenle etkinlik, uygulamanızın mevcut görev ve arka gruplarına eklenmek yerine yeni bir görev başlatır. Bu, önceki örnekte oluşturulan niyet türüdür.
Uygulamanızın normal uygulama akışında bulunan bir etkinlik. Bu durumda, etkinliğin başlatılması, kullanıcının Geri ve Yukarı düğmeleriyle ilgili beklentilerinin korunması için bir geri yığın oluşturur.
Bildiriminizin amacını yapılandırmanın farklı yolları hakkında daha fazla bilgi için bkz. Bildirimden Etkinlik Başlatma.
Bildirimi gösterme
Bildirimin gösterilmesi için şu numarayı arayın:
NotificationManagerCompat.notify()
bildirim için benzersiz bir kimlik iletmek ve
NotificationCompat.Builder.build()
.
Bu durum aşağıdaki örnekte gösterilmektedir:
Kotlin
with(NotificationManagerCompat.from(this)) { if (ActivityCompat.checkSelfPermission( this@MainActivity, Manifest.permission.POST_NOTIFICATIONS ) != PackageManager.PERMISSION_GRANTED ) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, // grantResults: IntArray) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return@with } // notificationId is a unique int for each notification that you must define. notify(NOTIFICATION_ID, builder.build()) }
Java
with(NotificationManagerCompat.from(this)) { if (ActivityCompat.checkSelfPermission( this@MainActivity, Manifest.permission.POST_NOTIFICATIONS ) != PackageManager.PERMISSION_GRANTED ) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return } // notificationId is a unique int for each notification that you must define. notify(NOTIFICATION_ID, builder.build()) }
NotificationManagerCompat.notify()
hizmetine ilettiğiniz bildirim kimliğini kaydedin,
çünkü bu özelliği güncellemek veya kaldırmak istediğinizde
bildirimi edinin.
Ayrıca, Android 13 ve sonraki sürümleri kullanıyorsanız bildirimleri manuel olarak etkinleştirin veya bildirim isteyin.
İşlem düğmeleri ekleyin
Bir bildirimde, kullanıcının yanıt vermesine olanak tanıyan en fazla üç işlem düğmesi sunulabilir. hızlı bir şekilde yapabilirsiniz. Örneğin, bir hatırlatıcıyı erteleyebilir veya bir kısa mesajı yanıtlayabilirsiniz. Ancak bunlar İşlem düğmeleri, kullanıcı ekrana dokunduğunda gerçekleştirilen işlemi bildirimi gönderebilir.
İşlem düğmesi eklemek için bir PendingIntent
addAction()
yöntemidir. Bu işlem, bildirimin varsayılan dokunma işlemini ayarlamaya benzer
bir etkinlik başlatmak yerine, etkinlik başlatma,
BroadcastReceiver
İşlemin uygulamayı kesintiye uğratmaması için arka planda bir iş gerçekleştirir.
zaten açık.
Örneğin, aşağıdaki kodda bir yayının belirli bir alıcı:
Kotlin
val ACTION_SNOOZE = "snooze" val snoozeIntent = Intent(this, MyBroadcastReceiver::class.java).apply { action = ACTION_SNOOZE putExtra(EXTRA_NOTIFICATION_ID, 0) } val snoozePendingIntent: PendingIntent = PendingIntent.getBroadcast(this, 0, snoozeIntent, 0) val builder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setContentIntent(pendingIntent) .addAction(R.drawable.ic_snooze, getString(R.string.snooze), snoozePendingIntent)
Java
String ACTION_SNOOZE = "snooze" Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class); snoozeIntent.setAction(ACTION_SNOOZE); snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0); PendingIntent snoozePendingIntent = PendingIntent.getBroadcast(this, 0, snoozeIntent, 0); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setContentIntent(pendingIntent) .addAction(R.drawable.ic_snooze, getString(R.string.snooze), snoozePendingIntent);
Arka planda çalışacak bir BroadcastReceiver
oluşturma hakkında daha fazla bilgi için
için Yayınlara genel bakış bölümünü inceleyin.
Bunun yerine medya oynatma düğmeleriyle bir bildirim oluşturmaya çalışıyorsanız parçaları nasıl duraklatacağınızı ve atlayacağınızı öğrenmek için medya kontrol eder.
Doğrudan yanıt işlemi ekleyin
Android 7.0 (API düzeyi 24) sürümünde kullanıma sunulan doğrudan yanıt işlemi, kullanıcıların doğrudan bildirime metin girmelerine olanak tanır. Ardından, kısa mesaj bir etkinlik açılmadan uygulamanıza gönderilir. Örneğin, doğrudan yanıt işlemi kullanıcıların kısa mesajları yanıtlamasına veya bildirimi görürsünüz.
Doğrudan yanıtlama işlemi, bir metin girişi açar. Kullanıcı yazmayı bitirdiğinde sistem, metni ekler yanıt olarak belirlediğiniz kavrama yanıt verir ve düşünmeye başlayın.
Yanıtla düğmesini ekleme
Doğrudan yanıtlamayı destekleyen bir bildirim işlemi oluşturmak için şu adımları uygulayın:
- Şunun bir örneğini oluştur:
RemoteInput.Builder
bildirim işleminize ekleyebilirsiniz. Bu sınıfın oluşturucusu kabul ediyor sistemin metin girişi için anahtar olarak kullandığı bir dize. Uygulamanız daha sonra girişin metnini almak için bu anahtarı kullanır.Kotlin
// Key for the string that's delivered in the action's intent. private val KEY_TEXT_REPLY = "key_text_reply" var replyLabel: String = resources.getString(R.string.reply_label) var remoteInput: RemoteInput = RemoteInput.Builder(KEY_TEXT_REPLY).run { setLabel(replyLabel) build() }
Java
// Key for the string that's delivered in the action's intent. private static final String KEY_TEXT_REPLY = "key_text_reply"; String replyLabel = getResources().getString(R.string.reply_label); RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) .setLabel(replyLabel) .build();
- Yanıtlama işlemi için bir
PendingIntent
oluşturun.Kotlin
// Build a PendingIntent for the reply action to trigger. var replyPendingIntent: PendingIntent = PendingIntent.getBroadcast(applicationContext, conversation.getConversationId(), getMessageReplyIntent(conversation.getConversationId()), PendingIntent.FLAG_UPDATE_CURRENT)
Java
// Build a PendingIntent for the reply action to trigger. PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), conversation.getConversationId(), getMessageReplyIntent(conversation.getConversationId()), PendingIntent.FLAG_UPDATE_CURRENT);
RemoteInput
nesnesiniaddRemoteInput()
kullanarak bir işleme ekleyin.Kotlin
// Create the reply action and add the remote input. var action: NotificationCompat.Action = NotificationCompat.Action.Builder(R.drawable.ic_reply_icon, getString(R.string.label), replyPendingIntent) .addRemoteInput(remoteInput) .build()
Java
// Create the reply action and add the remote input. NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon, getString(R.string.label), replyPendingIntent) .addRemoteInput(remoteInput) .build();
- İşlemi bir bildirime uygulayıp bildirim gönderin.
Kotlin
// Build the notification and add the action. val newMessageNotification = Notification.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_message) .setContentTitle(getString(R.string.title)) .setContentText(getString(R.string.content)) .addAction(action) .build() // Issue the notification. with(NotificationManagerCompat.from(this)) { notificationManager.notify(notificationId, newMessageNotification) }
Java
// Build the notification and add the action. Notification newMessageNotification = new Notification.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_message) .setContentTitle(getString(R.string.title)) .setContentText(getString(R.string.content)) .addAction(action) .build(); // Issue the notification. NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(notificationId, newMessageNotification);
Sistem, kullanıcının bildirim işlemini tetiklediğinde (Şekil 4'te gösterildiği gibi) kullanıcıdan yanıt girmesini ister.
Yanıttan kullanıcı girişini alma
Bildirimin yanıt kullanıcı arayüzünden kullanıcı girişi almak için şunu çağırın:
RemoteInput.getResultsFromIntent()
BroadcastReceiver
tarafından alınan Intent
iletildi:
Kotlin
private fun getMessageText(intent: Intent): CharSequence? { return RemoteInput.getResultsFromIntent(intent)?.getCharSequence(KEY_TEXT_REPLY) }
Java
private CharSequence getMessageText(Intent intent) { Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); if (remoteInput != null) { return remoteInput.getCharSequence(KEY_TEXT_REPLY); } return null; }
Kısa mesajı işledikten sonra şu numarayı arayarak bildirimi güncelleyin:
aynı kimlik ve etikete (kullanılıyorsa) NotificationManagerCompat.notify()
. Bu
Doğrudan yanıt arayüzünü gizlemek ve kullanıcıya yanıtının
doğru bir şekilde alınır ve işlenir.
Kotlin
// Build a new notification, which informs the user that the system // handled their interaction with the previous notification. val repliedNotification = Notification.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_message) .setContentText(getString(R.string.replied)) .build() // Issue the new notification. NotificationManagerCompat.from(this).apply { notificationManager.notify(notificationId, repliedNotification) }
Java
// Build a new notification, which informs the user that the system // handled their interaction with the previous notification. Notification repliedNotification = new Notification.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_message) .setContentText(getString(R.string.replied)) .build(); // Issue the new notification. NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(notificationId, repliedNotification);
Bu yeni bildirimle çalışırken
alıcının
onReceive()
yöntemidir.
Şu numarayı arayarak yanıtı bildirimin altına ekleyin:
setRemoteInputHistory()
.
Ancak bir mesajlaşma uygulaması geliştiriyorsanız mesajlaşma tarzında bir bildirim oluşturun ve yeni mesajı görüşmeye ekleyin.
Mesajlaşma uygulamalarından gelen bildirimlerle ilgili daha fazla öneri için şu bölüme bakın: en iyi uygulamalar.
İlerleme çubuğu ekleyin
Bildirimler, kullanıcılara devam eden bir işlemin durumu
İşlemin ne kadarının tamamlandığını herhangi bir zamanda tahmin edebiliyorsanız
"belirle" (Şekil 5'te gösterildiği gibi) çağrısı yaparak
setProgress(max, progress,
false)
.
İlk parametre, "complete" değeri 100 gibi olur. İkincisi,
ne kadarının
tamamlandığını gösterir. Sonuncusu, bunun kesin bir ilerleme olduğunu
çubuk.
İşleminiz devam ederken progress
için güncellenmiş bir değerle setProgress(max, progress,
false)
işlevini sürekli olarak çağırın ve aşağıdaki örnekte gösterildiği gibi bildirimi yeniden yayınlayın.
Kotlin
val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply { setContentTitle("Picture Download") setContentText("Download in progress") setSmallIcon(R.drawable.ic_notification) setPriority(NotificationCompat.PRIORITY_LOW) } val PROGRESS_MAX = 100 val PROGRESS_CURRENT = 0 NotificationManagerCompat.from(this).apply { // Issue the initial notification with zero progress. builder.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false) notify(notificationId, builder.build()) // Do the job that tracks the progress here. // Usually, this is in a worker thread. // To show progress, update PROGRESS_CURRENT and update the notification with: // builder.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false); // notificationManager.notify(notificationId, builder.build()); // When done, update the notification once more to remove the progress bar. builder.setContentText("Download complete") .setProgress(0, 0, false) notify(notificationId, builder.build()) }
Java
... NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID); builder.setContentTitle("Picture Download") .setContentText("Download in progress") .setSmallIcon(R.drawable.ic_notification) .setPriority(NotificationCompat.PRIORITY_LOW); // Issue the initial notification with zero progress. int PROGRESS_MAX = 100; int PROGRESS_CURRENT = 0; builder.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false); notificationManager.notify(notificationId, builder.build()); // Do the job that tracks the progress here. // Usually, this is in a worker thread. // To show progress, update PROGRESS_CURRENT and update the notification with: // builder.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false); // notificationManager.notify(notificationId, builder.build()); // When done, update the notification once more to remove the progress bar. builder.setContentText("Download complete") .setProgress(0,0,false); notificationManager.notify(notificationId, builder.build());
İşlemin sonunda progress
, max
değerine eşit olmalıdır. İsterseniz
işlemin tamamlandığını gösteren bir ilerleme çubuğu görürsünüz. Her iki durumda da,
bildirim metnini işlemin tamamlandığını belirtecek şekilde güncelleyin. Kaldırmak için
ilerleme çubuğunda setProgress(0, 0, false)
numarasını arayın.
Belirsiz bir ilerleme çubuğu (tamamlanma yüzdesini göstermeyen bir çubuk) görüntülemek için setProgress(0, 0, true)
işlevini çağırın. Sonuç olarak,
önceki ilerleme çubuğuyla aynı stile sahiptir ancak sürekli
animasyonun tamamlanmadığı anlamına gelir. İlerleme animasyonu,
setProgress(0, 0, false)
adlı kişiyi arar ve ardından bildirimi kaldırarak
etkinlik göstergesine dokunun.
Bildirim metnini, işlemin tamamlandığını belirtecek şekilde değiştirmeyi unutmayın. belirir.
Sistem genelinde bir kategori belirleyin
Android, rahatsız edici bir durum olup olmadığını belirlemek için sistem genelinde önceden tanımlanmış kategoriler kullanır Kullanıcı Rahatsız Etmeyin özelliğini etkinleştirdiğinde belirli bir bildirimi olan kullanıcı mod'u seçin.
Bildiriminiz, şurada tanımlanan bildirim kategorilerinden birine giriyorsa:
NotificationCompat
- örneğin
CATEGORY_ALARM
,
CATEGORY_REMINDER
,
CATEGORY_EVENT
,
veya
CATEGORY_CALL
: beyan etmek
uygun kategoriyi
setCategory()
:
Kotlin
var builder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setCategory(NotificationCompat.CATEGORY_MESSAGE)
Java
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setCategory(NotificationCompat.CATEGORY_MESSAGE);
Sistem, bildirim kategorinizle ilgili bu bilgileri
Cihaz, Do Not modundayken bildiriminizi görüntülemeyle ilgili kararlar
Rahatsız edici. Ancak, sistem genelinde bir kategori ayarlamanız gerekmez. Yalnızca bunu yap
Bildirimleriniz şurada tanımlanan kategorilerden biriyle eşleşiyorsa:
NotificationCompat
Acil mesaj göster
Uygulamanızın, gelen telefon araması veya çalan alarm. Böyle durumlarda, bir tam ekran intent'i tıklayın.
Bildirim çağrıldığında, kullanıcılar aşağıdakilerden birini görür: cihazın kilit durumu:
- Kullanıcının cihazı kilitliyse, görüntülenen tam ekran etkinlik kilit ekranı.
- Kullanıcının cihazının kilidi açıksa bildirim genişletilmiş bir bildirimi işleme veya kapatma seçeneklerini içeren bir form oluşturabilirsiniz.
Aşağıdaki kod snippet'inde, bildiriminizin tam ekran intent ile nasıl ilişkilendirileceği gösterilmektedir:
Kotlin
val fullScreenIntent = Intent(this, ImportantActivity::class.java) val fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT) var builder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setFullScreenIntent(fullScreenPendingIntent, true)
Java
Intent fullScreenIntent = new Intent(this, ImportantActivity.class); PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setFullScreenIntent(fullScreenPendingIntent, true);
Kilit ekranının görünürlüğünü ayarlama
Kilit ekranındaki bildirimde gösterilen ayrıntı düzeyini kontrol etmek için:
telefon etmek
setVisibility()
ve aşağıdaki değerlerden birini belirtin:
VISIBILITY_PUBLIC
: Bildirimin tam içeriği kilit ekranında gösterilir.VISIBILITY_SECRET
: Bildirimin hiçbir kısmı kilit ekranında gösterilmez.VISIBILITY_PRIVATE
: bildirim simgesi ve içerik gibi temel bilgiler kilit ekranında görünür. Bildirimin tam içeriği gösterilmiyor.
VISIBILITY_PRIVATE
ayarlarını yaparken, uygulamanızın alternatif bir sürümünü de sağlayabilirsiniz.
bildirim içeriğini devre dışı bırakabilirsiniz. Örneğin, SMS uygulaması
"3 yeni kısa mesajınız var" şeklinde bir bildirim görüntüleyebilir. ama
, ileti içeriklerini ve gönderenleri gizler. Bu alternatifi sunmak için
bildirimi almak için önce
NotificationCompat.Builder
, her zamanki gibi. Ardından, alternatif bildirimi ekleyin
normal bildirime
setPublicVersion()
.
Şunu da unutmayın: Bildirimler kilit ekranında görünür ve cihazınıza bağlı olarak uygulamanın bildirim kanallarına erişebilirsiniz.
Bildirimi güncelleme
Bir bildirimi gönderdikten sonra güncellemek için şu numarayı arayın:
NotificationManagerCompat.notify()
(kullandığınız kimliği tekrar ileterek)
kontrol edin. Önceki bildirim kapatılırsa yeni bir bildirim oluşturulur
.
İsterseniz
setOnlyAlertOnce()
Böylece bildiriminiz sesli, titreşimli veya görsel olarak kullanıcının çalışmasını kesintiye uğratır
ipuçları (yalnızca bildirim ilk kez göründüğünde, daha sonrası için değil)
güncellemelerine göz atın.
Bildirimi kaldırma
Bildirimler aşağıdakilerden biri gerçekleşene kadar görünür kalır:
- Kullanıcı bildirimi kapatır.
setAutoCancel()
adlı kişiyi ararsanız kullanıcı bildirime dokunur. bildirimi oluşturabilirsiniz.- Aranacağınız zaman:
cancel()
adresini ziyaret edin. Bu yöntem ayrıca, bildirimleri etkinleştirebilirsiniz. - Aranacağınız zaman:
cancelAll()
Bu işlem, daha önce gönderdiğiniz tüm bildirimleri kaldırır. -
bildirimi,
setTimeoutAfter()
. Gerekirse bir bildirimi, belirtilen zaman aşımı süresi dolmadan iptal edebilirsiniz.
Mesajlaşma uygulamaları için en iyi uygulamalar
Şu hesap için bildirim oluştururken burada listelenen en iyi uygulamaları dikkate alın: Mesajlaşma ve sohbet uygulamaları.
MessagingStyle'ı kullanma
Android 7.0 (API düzeyi 24) sürümünden itibaren Android, mesajlaşma içeriği için özel olarak bir bildirim stili şablonu sağlar. Her bir
NotificationCompat.MessagingStyle
bildirim üzerinde görüntülenen etiketlerden birkaçını değiştirebilirsiniz.
ve ileti dizisine ait içerik görünümünü içeren ek mesajlar
bildirim.
Aşağıdaki kod snippet'i, bir bildirimin stilinin nasıl özelleştirileceğini gösterir
(MessagingStyle
sınıfı kullanılıyor).
Kotlin
val user = Person.Builder() .setIcon(userIcon) .setName(userName) .build() val notification = NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("2 new messages with $sender") .setContentText(subject) .setSmallIcon(R.drawable.new_message) .setStyle(NotificationCompat.MessagingStyle(user) .addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getPerson()) .addMessage(messages[2].getText(), messages[2].getTime(), messages[2].getPerson()) ) .build()
Java
Person user = new Person.Builder() .setIcon(userIcon) .setName(userName) .build(); Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("2 new messages with " + sender) .setContentText(subject) .setSmallIcon(R.drawable.new_message) .setStyle(new NotificationCompat.MessagingStyle(user) .addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getPerson()) .addMessage(messages[2].getText(), messages[2].getTime(), messages[2].getPerson()) ) .build();
Android 9.0 (API düzeyi 28) sürümünden itibaren,
elde etmek için Person
sınıfı
en uygun şekilde oluşturulmasını sağlar.
NotificationCompat.MessagingStyle
uygulamasını kullanırken aşağıdakileri yapın:
- Telefonla arama
MessagingStyle.setConversationTitle()
seçeneğini kullanabilirsiniz. İyi sohbet başlığı grup sohbetinin adı olabilir veya ve sohbetteki katılımcıların listesini görebilirsiniz. Bu olmadan, ile bire bir görüşmeye ait olduğu düşünülebilir. ileti dizisindeki en son iletinin göndereni. - Resim gibi medya mesajları eklemek için
MessagingStyle.setData()
yöntemini kullanın. Kalıbın MIME türleri resim/* desteklenir.
Doğrudan Yanıtı kullanma
Doğrudan Yanıt, kullanıcının bir iletiyi satır içi olarak yanıtlamasına olanak tanır.
- Bir kullanıcı satır içi yanıt işlemiyle yanıt verdikten sonra
MessagingStyle.addMessage()
MessagingStyle
bildirimini güncelleyin ve bildirimi geri çekmeyin veya iptal etmeyin bildirimi görürsünüz. Bildirimin iptal edilmemesi, kullanıcının birden fazla bildirim göndermesine olanak tanır. bildirimden yanıt alır. - Satır içi yanıt işlemini Wear OS ile uyumlu hale getirmek için şu numarayı arayın:
Action.WearableExtender.setHintDisplayInlineAction(true)
. - Şunu kullanın:
addHistoricMessage()
tarihsel veriler ekleyerek doğrudan cevap görüşmesi için bağlam bilgisi sağlama yöntemi bildirime iletebilir.
Akıllı Yanıt'ı etkinleştir
- Akıllı Yanıt'ı etkinleştirmek için şu numarayı arayın:
setAllowGeneratedResponses(true)
karar vermemiz gerekir. Bu durumda Akıllı Yanıt yanıtları, Kullanıcı, bildirim bir Wear OS cihaza köprü olarak bağlandığında kullanılabilir. Akıllı Yanıt yanıtlar, tamamen kol saatindeki bir makine öğrenimi modeli tarafındanNotificationCompat.MessagingStyle
tarafından sağlanan bağlam oluşturmak için herhangi bir veri yüklenmez ve tıklayın.
Bildirim meta verileri ekleme
- Sisteme uygulamanızı nasıl işleyeceğini belirtmek için bildirim meta verileri atayın
cihaz
Do Not Disturb mode
dayken bildirimler alın. Örneğin, Rahatsız Etmeyin ayarını geçersiz kılmak içinaddPerson()
veyasetCategory(Notification.CATEGORY_MESSAGE)
yöntemini kullanın.