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.
1.şekil 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ümlerin yüklü olduğu cihazlarda Android 7.1 (API düzeyi 25) veya önceki sürümlerin yüklü olduğu cihazlardaki gibi çalışı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
NotificationChannel
nesnesi 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:
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ı orijinal değerleriyle yeniden oluşturmak herhangi bir işlem yapmaz. Bu nedenle, bir uygulamayı başlatırken bu kodu çağırmak güvenlidir.
Belirli bir kanalda yayınlanan tüm bildirimler, varsayılan olarak NotificationManagerCompat
sınıfındaki önem düzeyine göre tanımlanan görsel ve işitsel davranışları kullanır. Örneğin, IMPORTANCE_DEFAULT
veya IMPORTANCE_HIGH
.
Ö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 önem düzeyi, kanalda yayınlanan tüm bildirimlerin kesinti düzeyini etkiler. 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 setPriority()
işlevini de çağırmanız gerekir. Bunu yaparken NotificationCompat
sınıfındaki bir öncelik sabiti kullanın.
Ö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
'ye gönderdikten sonra önem seviyesini 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()
numaralı telefonu arayarakNotificationChannel
nesnesini 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çma
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ızın bu bildirim ayarlarına kolayca erişebilmesi 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ının bildirim kanalının ayarlarına nasıl yönlendirilebileceği 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);
Bu amaç, uygulamanızın paket adını (uygulama kimliği olarak da bilinir) ve düzenlenecek kanalı belirten iki ekstranın kullanılmasını gerektirir.
Bildirim kanalını silme
deleteNotificationChannel()
numaralı telefonu arayarak bildirim kanallarını silebilirsiniz.
Aşağıdaki örnek kod, bu işlemin nasıl tamamlanacağını 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
Kanallarınızın ayarlar kullanıcı arayüzündeki 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ü her hesap için bir bildirim kanalı grubu oluşturmanıza olanak tanır. Bu sayede kullanıcılar, aynı ada sahip birden fazla bildirim kanalını kolayca tanımlayıp kontrol edebilir.
Ş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 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.
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, 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.