Android 8.0 (API düzeyi 26) sürümünden itibaren tüm bildirimler bir kanala atanmalıdır. Her kanal için, kanaldaki tüm bildirimlere uygulanacak 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 kanallara ve diğer bildirim özelliklerine genel bir bakış için aşağıdaki videoya göz atın.
Bildirim kanallarıyla ilgili kullanıcı ayarları, Şekil 1'de gösterildiği gibi, her uygulama için sistem ayarlarındaki kullanılabilir.
Bir bildirim kanalı oluşturduktan sonra bildirim davranışlarını değiştiremezsiniz. Bu aşamada, kullanıcı tam kontrole sahip olur. Bununla birlikte, bir kanalın adını ve açıklamasını değiştirebilirsiniz.
Göndermeniz gereken her bildirim türü için bir kanal oluşturun. Ayrıca 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 görüşme grubu için ayrı bildirim kanalları ayarlayabilirsiniz.
Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedeflediğinizde bir veya daha fazla bildirim kanalı uygulamanız gerekir. targetSdkVersion
değeriniz 25 veya daha düşük bir değere ayarlanırsa uygulamanız Android 8.0 (API düzeyi 26) veya sonraki bir sürümü üzerinde çalışırken Android 7.1 (API düzeyi 25) veya önceki sürümleri çalıştıran cihazlarla aynı şekilde davranır.
Bildirim kanalı oluşturma
Bildirim kanalı oluşturmak için şu adımları uygulayın:
Benzersiz kanal kimliği, kullanıcı tarafından görülebilen ad ve önem düzeyine sahip bir
NotificationChannel
nesnesi oluşturun.İsteğe bağlı olarak,
setDescription()
ile kullanıcının sistem ayarlarında göreceği açıklamayı belirtin.Bildirim kanalını
createNotificationChannel()
'e ileterek kaydedin.
Aşağıdaki örnekte bir bildirim kanalının nasıl oluşturulacağı ve kaydedileceği gösterilmektedir:
Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) 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 = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel) }
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); } }
Mevcut bir bildirim kanalının orijinal değerleriyle yeniden oluşturulması 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ında tanımlanan IMPORTANCE_DEFAULT
veya IMPORTANCE_HIGH
gibi görsel ve işitsel davranışları kullanır.
Önem düzeyleri hakkında daha fazla bilgi edinmek için sonraki bölüme bakın.
Kanalınızın varsayılan bildirim davranışlarını daha da özelleştirmek isterseniz NotificationChannel
'da 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 olmadığı konusunda son kontrolün kullanıcıda olduğunu unutmayın.
Ayrıca, createNotificationChannels()
yöntemini çağırarak tek bir işlemde birden çok bildirim kanalı da oluşturabilirsiniz.
Önem düzeyini ayarlama
Kanal önem derecesi, kanalda yayınlanan tüm bildirimlerin kesinti düzeyini etkiler. Bu değeri, NotificationChannel
oluşturucuda IMPORTANCE_NONE(0)
ile IMPORTANCE_HIGH(4)
arasındaki beş önem düzeyinden birini kullanarak belirtin.
Android 7.1 (API düzeyi 25) veya önceki sürümleri çalıştıran cihazları desteklemek üzere NotificationCompat
sınıfından bir öncelik sabiti kullanarak her bildirim için setPriority()
çağırmanız da gerekir.
Önem (NotificationManager.IMPORTANCE_*
) ve öncelik (NotificationCompat.PRIORITY_*
) sabitleri, aşağıdaki tabloda gösterildiği gibi, kullanıcının görebildiği ö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 Bir 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 |
Önemleri fark etmeksizin tüm bildirimler, bildirim çekmecesinde ve başlatıcı simgesinde bir rozet gibi kesintiye uğratmayan sistem kullanıcı arayüzü konumlarında görünür ancak bildirim rozetinin görünümünü değiştirebilirsiniz.
Kanalı NotificationManager
'a gönderdikten sonra önem düzeyini değiştiremezsiniz. Ancak, kullanıcılar uygulamanızın kanallarıyla ilgili tercihlerini istedikleri zaman değiştirebilir.
Uygun bir öncelik düzeyi seçme hakkında bilgi edinmek için Bildirim tasarım kılavuzundaki "Öncelik düzeyleri" konusuna bakın.
Bildirim kanalı ayarlarını okuma
Kullanıcılar, titreşim ve uyarı sesi gibi davranışlar da dahil olmak üzere bildirim kanallarıyla ilgili ayarları değiştirebilir. Bir kullanıcının bildirim kanallarınıza uyguladığı ayarları öğrenmek isterseniz şu adımları izleyin:
getNotificationChannel()
veyagetNotificationChannels()
yöntemini çağırarakNotificationChannel
nesnesini alın.getVibrationPattern()
,getSound()
vegetImportance()
gibi belirli kanal ayarlarını sorgulayın.
Uygulamanızın istenen davranışı engellediğini düşündüğünüz bir kanal ayarı tespit ederseniz kullanıcıya bunu değiştirmesini önerebilir ve sonraki bölümde gösterildiği gibi kanal ayarlarını açmak için bir işlem sunabilirsiniz.
Bildirim kanalı ayarlarını açma
Bir 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. Uygulamanızın ayarlar kullanıcı arayüzüne bu sistem ayarlarını açan bir öğe ekleyerek kullanıcılarınızın bu bildirim ayarlarına kolayca erişmesini sağlayabilirsiniz.
Bildirim kanalları için sistem ayarlarını, ACTION_CHANNEL_NOTIFICATION_SETTINGS
işlemini kullanan bir Intent
ile açabilirsiniz.
Örneğin, aşağıdaki örnek kodda kullanıcıları bir bildirim kanalının ayarlarına nasıl yönlendirebileceğiniz gösterilmektedir:
Kotlin
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
Java
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
Amacın, uygulamanızın paket adını (uygulama kimliği olarak da bilinir) ve düzenlenecek kanalı belirten iki ekstra özellik gerektirdiğine dikkat edin.
Bildirim kanalını silme
deleteNotificationChannel()
numaralı telefonu arayarak bildirim kanallarını silebilirsiniz.
Aşağıdaki örnek kod bu işlemi nasıl tamamlayacağınızı gösterir:
Kotlin
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
Java
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
Bildirim kanal grubu oluşturma
Ayarlar kullanıcı arayüzünde kanallarınızın görünümünü daha ayrıntılı bir şekilde düzenlemek isterseniz kanal grupları oluşturabilirsiniz. Uygulamanız iş profilleri gibi birden fazla kullanıcı hesabını destekliyorsa bu iyi bir fikirdir. Çünkü bu özellik her hesap için bir bildirim kanalı grubu oluşturmanıza olanak tanır. Bu şekilde, kullanıcılar aynı ada sahip birden çok bildirim kanalını kolayca belirleyip kontrol edebilir.
Örneğin, bir sosyal ağ uygulaması kişisel hesaplar ve iş hesapları için destek içerebilir. Bu senaryoda her hesap, aynı işlev ve ada sahip birden fazla bildirim kanalına ihtiyaç duyabilir. Örneğin:
İ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 bir hesap için gruplar halinde düzenlemek, kullanıcıların bunları ayırt edebilmesini sağlar.
Her bildirim kanalı grubu, paketiniz içinde benzersiz olması gereken bir kimlik ve kullanıcı tarafından görülebilen bir ad gerektirir. Aşağıdaki snippet'te bir bildirim kanalı grubunun nasıl oluşturulacağı gösterilmektedir.
Kotlin
// The id of the group. val groupId = "my_group_01" // The user-visible name of the group. val groupName = getString(R.string.group_name) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
Java
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
Yeni bir grup oluşturduktan sonra grupla yeni bir NotificationChannel
nesnesini ilişkilendirmek için setGroup()
çağrısı yapabilirsiniz.
Kanalı bildirim yöneticisine gönderdikten sonra bildirim kanalı ile grup ilişkilendirmeyi değiştiremezsiniz.