Android 8.0 (API düzeyi 26) sürümünden başlayarak, tüm bildirimlerin bir kanala atanması gerekir. Her kanal için, o kanaldaki tüm bildirimlere uygulanan görsel ve işitsel davranışı ayarlayabilirsiniz. Kullanıcılar bu ayarları değiştirebilir ve uygulamanızdaki hangi bildirim kanallarının rahatsız edici veya görünür olabileceğine karar verebilir.
Android 8.0'daki kanallar ve diğer bildirim özellikleri hakkında genel bilgi edinmek için aşağıdaki videoyu izleyin.
Bildirim kanallarıyla ilgili kullanıcı ayarları, Şekil 1'de gösterildiği gibi sistem ayarlarında her uygulama için kullanılabilir.
Şekil 1. Saat uygulaması ve kanallarından biri için bildirim ayarları.
Bildirim kanalı oluşturduktan sonra bildirim davranışlarını değiştiremezsiniz. Bu noktada kullanıcı tam kontrole sahiptir. Ancak, kanalın adını ve açıklamasını değiştirebilirsiniz.
Göndermeniz gereken her bildirim türü için bir kanal oluşturun. Kullanıcıların yaptığı seçimleri yansıtmak için bildirim kanalları da oluşturabilirsiniz. Örneğin, bir kullanıcının bir mesajlaşma uygulamasında oluşturduğu her ileti dizisi grubu için ayrı bildirim kanalları kurabilirsiniz.
Android 8.0'ı (API düzeyi 26) veya sonraki sürümleri hedeflediğinizde bir veya daha fazla bildirim kanalı uygulamanız gerekir. targetSdkVersion 25 veya daha düşük bir değere ayarlanmışsa uygulamanız Android 8.0 (API düzeyi 26) veya sonraki sürümlerde çalışırken Android 7.1 (API düzeyi 25) veya önceki sürümlerin yüklü olduğu cihazlardaki gibi davranır.
Bildirim kanalı oluşturma
Bildirim kanalı oluşturmak için aşağıdaki adımları uygulayın:
Benzersiz bir kanal kimliği, kullanıcı tarafından görülebilen ad ve önem düzeyi içeren bir
NotificationChannelnesnesi oluşturun.İsteğe bağlı olarak,
setDescription()ile kullanıcının sistem ayarlarında gördüğü açıklamayı belirtin.Bildirim kanalını
createNotificationChannel()'ye ileterek kaydedin.
Aşağıdaki örnekte, bildirim kanalının nasıl oluşturulacağı ve kaydedileceği gösterilmektedir:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = context.getSystemService(NotificationManager::class.java) notificationManager?.createNotificationChannel(mChannel) }
Mevcut bir bildirim kanalını orijinal değerleriyle yeniden oluşturmak herhangi bir işlem yapmaz. Bu nedenle, bir uygulamayı başlatırken bu kodu çağırmak güvenlidir.
Varsayılan olarak, belirli bir kanalda yayınlanan tüm bildirimler, NotificationManagerCompat sınıfındaki önem düzeyine göre tanımlanan görsel ve işitsel davranışları (ör. IMPORTANCE_DEFAULT veya IMPORTANCE_HIGH) kullanır. Önem düzeyleri hakkında daha fazla bilgi için sonraki bölüme bakın.
Kanalınızın varsayılan bildirim davranışlarını daha fazla özelleştirmek istiyorsanız NotificationChannel üzerinde enableLights(), setLightColor() ve setVibrationPattern() gibi yöntemleri çağırabilirsiniz. Kanalı oluşturduktan sonra bu ayarları değiştiremeyeceğinizi ve bu davranışların etkin olup olmayacağı konusunda son kararı kullanıcının vereceğini unutmayın.
Ayrıca createNotificationChannels() işlevini çağırarak tek bir işlemde birden fazla bildirim kanalı oluşturabilirsiniz.
Önem düzeyini ayarlama
Kanalın önemi, kanalda yayınlanan tüm bildirimlerin kesinti düzeyini etkiler. Kanalın önemini, NotificationChannel oluşturucusunda IMPORTANCE_NONE(0) ile IMPORTANCE_HIGH(4) arasında değişen beş önem düzeyinden birini kullanarak belirtin.
Android 7.1 (API düzeyi 25) veya önceki sürümlerini çalıştıran cihazları desteklemek için her bildirimde setPriority() işlevini de çağırmanız ve NotificationCompat sınıfından bir öncelik sabiti kullanmanız gerekir.
Önem (NotificationManager.IMPORTANCE_*) ve öncelik (NotificationCompat.PRIORITY_*) sabitleri, aşağıdaki tabloda gösterildiği gibi kullanıcı tarafından görülebilen önem seçenekleriyle eşlenir.
| Kullanıcı tarafından görülebilen önem düzeyi | Önem (Android 8.0 ve sonraki sürümler) | Öncelik (Android 7.1 ve önceki sürümler) |
|---|---|---|
| Acil Bir ses çıkarır ve uyarı bildirimi olarak görünür. |
IMPORTANCE_HIGH |
PRIORITY_HIGH veya PRIORITY_MAX |
| Yüksek Ses çıkarır. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| Orta Ses çıkarmaz. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| Düşük Ses çıkarmaz ve durum çubuğunda görünmez. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| Yok Ses çıkarmaz ve durum çubuğunda veya gölgede görünmez. |
IMPORTANCE_NONE |
N/A |
Önem değerinden bağımsız olarak tüm bildirimler, bildirim çekmecesindeki gibi veya başlatıcı simgesinde bir rozet olarak kesintiye neden olmayan sistem kullanıcı arayüzü konumlarında görünür. Bununla birlikte, bildirim rozetinin görünümünü değiştirebilirsiniz.
Kanalı NotificationManager'e gönderdikten sonra önem düzeyini değiştiremezsiniz. Ancak kullanıcı, uygulamanızın kanallarıyla ilgili tercihlerini istediği zaman değiştirebilir.
Uygun bir öncelik seviyesi seçme hakkında bilgi edinmek için Bildirim tasarımı kılavuzu'ndaki "Öncelik seviyeleri" bölümüne bakın.
Bildirim kanalı ayarlarını okuma
Kullanıcılar, titreşim ve uyarı sesi gibi davranışlar da dahil olmak üzere bildirim kanallarının ayarlarını değiştirebilir. Bir kullanıcının bildirim kanallarınıza uyguladığı ayarları öğrenmek istiyorsanız aşağıdaki adımları uygulayın:
getNotificationChannel()veyagetNotificationChannels()numaralarını arayarakNotificationChannelnesnesini alın.getVibrationPattern(),getSound()vegetImportance()gibi kanala özgü ayarları sorgulayın.
Uygulamanızın amaçlanan davranışını engellediğini düşündüğünüz bir kanal ayarı tespit ederseniz kullanıcının bu ayarı değiştirmesini önerebilir ve kanal ayarlarını açmak için bir işlem sağlayabilirsiniz (sonraki bölümde gösterildiği gibi).
Bildirim kanalı ayarlarını açın.
Bildirim kanalı oluşturduktan sonra bildirim kanalının görsel ve işitsel davranışlarını programatik olarak değiştiremezsiniz. Kanal davranışlarını yalnızca kullanıcı sistem ayarlarından değiştirebilir. Kullanıcılarınıza bu bildirim ayarlarına hızlı erişim imkanı sunmak için uygulamanızın ayarlar kullanıcı arayüzüne bu sistem ayarlarını açan bir öğe ekleyin.
ACTION_CHANNEL_NOTIFICATION_SETTINGS işlemini kullanan bir Intent ile bildirim kanallarının sistem ayarlarını açabilirsiniz.
Örneğin, aşağıdaki örnek kodda bir kullanıcıyı bildirim kanalının ayarlarına nasıl yönlendirebileceğiniz gösterilmektedir:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID) } Button(onClick = { context.startActivity(intent) }) { Text("Open Channel Settings") }
Amacın, uygulamanızın paket adını (uygulama kimliği olarak da bilinir) ve düzenlenecek kanalı belirten iki ek bilgi gerektirdiğini unutmayın.
Bildirim kanalını silme
deleteNotificationChannel() numaralı telefonu arayarak bildirim kanallarını silebilirsiniz.
Aşağıdaki örnek kodda bu işlemin nasıl tamamlanacağı gösterilmektedir:
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
Bildirim kanalı grubu oluşturma
Kanallarınızın ayarlar kullanıcı arayüzündeki görünümünü daha da düzenlemek istiyorsanız kanal grupları oluşturabilirsiniz. Uygulamanız birden fazla kullanıcı hesabını destekliyorsa bu iyi bir fikirdir. Çünkü her hesap için bir bildirim kanalı grubu oluşturmanıza olanak tanır. Kanal grupları, kullanıcıların aynı ada sahip birden fazla bildirim kanalını ayırt etmesine ve kontrol etmesine yardımcı olur.
Şekil 2. Kişisel ve iş hesapları için gruplar içeren bildirim kanalı ayarları.
Örneğin, bir sosyal ağ uygulaması kişisel ve iş hesapları için destek içerebilir. Bu senaryoda, her hesap aşağıdaki gibi aynı işlevlere ve adlara sahip birden fazla bildirim kanalı gerektirebilir:
İki kanalı olan kişisel bir hesap:
Yeni yorumlar
Yayın önerileri
İki kanalı olan bir işletme hesabı:
Yeni yorumlar
Yayın önerileri
Bildirim kanallarını her hesap için gruplar halinde düzenlemek, kullanıcıların bu kanallar arasında ayrım yapmasına olanak tanır.
Her bildirim kanalı grubu için bir kimlik gerekir. Bu kimlik, paketinizde benzersiz olmalı ve kullanıcı tarafından görülebilen bir ad içermelidir. Aşağıdaki snippet'te, bildirim kanalı grubunun nasıl oluşturulacağı gösterilmektedir.
fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) { val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java) notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName)) }
Yeni bir grup oluşturduktan sonra, yeni bir NotificationChannel nesnesini grupla ilişkilendirmek için
setGroup()
işlevini çağırabilirsiniz.
Kanalı bildirim yöneticisine gönderdikten sonra bildirim kanalı ile grup arasındaki ilişkilendirmeyi değiştiremezsiniz.