Bildirim kanalları oluşturma ve yönetme

Android 8.0 (API düzeyi 26) sürümünden itibaren, tüm bildirimlerin yardımcı olur. Her kanal için uygun görsel ve işitsel davranışı ayarlayabilirsiniz: ilgili kanaldaki tüm bildirimlere uygulanır. Kullanıcılar bu ayarları değiştirebilir ve uygulamanızdaki hangi bildirim kanallarının rahatsız edici olabileceğine veya görünür.

Kanallara genel bakış ve diğer bildirimler için aşağıdaki videoyu izleyin daha fazla bilgi edineceksiniz.

Bildirim kanallarına ilişkin kullanıcı ayarları, ayarlarını kullanın.

Şekil 1. Saat uygulaması için bildirim ayarları ve kanallarından biri.

Bildirim kanalı oluşturduktan sonra bildirimi değiştiremezsiniz ve bunları kontrol etmenizi sağlar. Bu noktada kullanıcı tam denetime sahip olur. Ancak, 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 transkriptinizi kullanıcıların yaptığı seçimleri yansıtmak için bildirim kanalları oluşturmasını sağlar. Örneğin, tarafından oluşturulan her ileti dizisi grubu için ayrı bildirim kanalları bir mesajlaşma uygulamasıdır.

Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedeflediğinizde daha fazla bildirim kanalı. 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ümde çalıştırıldığında aynı şekilde davranır Android 7.1 (API düzeyi 25) veya önceki sürümleri çalıştıran cihazlarda olduğu gibi.

Bildirim kanalı oluşturma

Bildirim kanalı oluşturmak için şu adımları uygulayın:

  1. Bir NotificationChannel nesne benzersiz bir kanal kimliği, kullanıcının görebildiği ad ve önem düzeyine sahip olmalıdır.

  2. İsteğe bağlı olarak, kullanıcının sistem ayarlarında göreceği açıklamayı belirtin. şununla: setDescription().

  3. Bildirim kanalını createNotificationChannel().

ziyaret edin.

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ı orijinal değerleriyle yeniden oluşturmak herhangi bir işlem yapmaz. işlemi olduğundan 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, IMPORTANCE_DEFAULT veya IMPORTANCE_HIGH. Daha fazla bilgi için sonraki bölüme bakın önem seviyelerini kullanın.

Kanalınızın varsayılan bildirim davranışlarını daha da özelleştirmek isterseniz telefon görüşmelerinde enableLights() setLightColor(), ve setVibrationPattern() NotificationChannel'da. Kanalı oluşturduktan sonra Bu ayarlar değiştirilemez ve kullanıcı bu ayarların etkin olduğundan emin olun.

Ayrıca, aşağıdakileri yaparak tek bir işlemde birden fazla bildirim kanalı oluşturabilirsiniz: arama createNotificationChannels().

Önem düzeyini ayarlama

Kanal önem derecesi, yayınlanan tüm bildirimlerin kesinti düzeyini etkiler kanalla ilgilidir. Aşağıdakilerden birini kullanarak NotificationChannel oluşturucuda bunu belirtin: beş önem düzeyi arasından IMPORTANCE_NONE(0) - IMPORTANCE_HIGH(4).

Android 7.1 (API düzeyi 25) veya önceki sürümleri çalıştıran cihazları desteklemek için ayrıca telefon etmek setPriority() her bildirim için NotificationCompat sınıfını kullanır.

Önem (NotificationManager.IMPORTANCE_*) ve öncelik (NotificationCompat.PRIORITY_*) sabit değerleri, kullanıcının görebildiği önemle eşlenir seçenekleridir.

Kullanıcının görebildiği önem düzeyi Önem (Android 8.0 ve sonraki sürümler) Öncelik (Android 7.1 ve önceki sürümler)
Acil
Ses çıkarır ve uyarı bildirimi olarak görünür.
IMPORTANCE_HIGH PRIORITY_HIGH veya PRIORITY_MAX
Yüksek
Ses çıkar.
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 derecesi ne olursa olsun tüm bildirimler rahatsız edici olmayan bir sistemde görünür Bildirim çekmecesinde ve başlatıcı simgesinde bir rozet varsa, ancak siz bildirim rozetinin görünümünü değiştirebilir.

Kanalı NotificationManager, siz Önem düzeyini değiştiremezsiniz. Ancak, kullanıcı istediğiniz zaman değiştirebilirsiniz.

Uygun bir öncelik düzeyi seçme hakkında bilgi edinmek için "Öncelik" seviyeler" Bildirimler tasarım kılavuzu.

Bildirim kanalı ayarlarını okuma

Kullanıcılar, davranışlar da dahil olmak üzere bildirim kanallarının ayarlarını değiştirebilir nasıl uyarlayacağınızı öğrenin. Bir kullanıcının bu ayarları bildirim kanallarınız için geçerliyse şu adımları uygulayın:

  1. Çağrı yaparak NotificationChannel nesnesini alın getNotificationChannel() veya getNotificationChannels().

  2. Aşağıdakiler gibi belirli kanal ayarlarını sorgulayın: getVibrationPattern() getSound() ve getImportance().

İstenen davranışı engellediğini düşündüğünüz bir kanal ayarı tespit ederseniz kullanıcının uygulamanızla ilgili değişikliği değiştirmesini önerebilir ve sonraki bölümde gösterildiği gibi kanal ayarlarını açın.

Bildirim kanalı ayarlarını aç

Bildirim kanalı oluşturduktan sonra bildirimi değiştiremezsiniz görsel ve işitsel davranışları programatik olarak takip edebilirsiniz. Yalnızca kullanıcı kanal davranışlarını sistem ayarlarından değiştirebilirsiniz. Kullanıcılarınıza bu bildirim ayarlarına kolayca erişebilirsiniz, uygulamanıza yeni bir öğe ayarlar kullanıcı arayüzünü açın.

Bildirim kanallarının sistem ayarlarını Intent ACTION_CHANNEL_NOTIFICATION_SETTINGS eyleme dökülebilir.

Örneğin, aşağıdaki örnek kod bir kullanıcıyı bir bildirim kanalının ayarları:

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);

Amaç, uygulamanızın paket adını belirten iki ekstra öğe gerektirdiğine dikkat edin. (uygulama kimliği olarak da bilinir) ve düzenlenecek kanalı seçin.

Bildirim kanalını silme

Şu numarayı arayarak bildirim kanallarını silebilirsiniz: deleteNotificationChannel(). 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

Ayarlar kullanıcı arayüzünde kanallarınızın görünümünü daha ayrıntılı düzenlemek isterseniz kanal grupları oluşturabilirsiniz. Bu, uygulamanızın birden fazla kullanıcı hesabı, örneğin iş profilleri oluşturmanıza olanak tanır, çünkü bildirim kanalı grubu oluşturabilirsiniz. Bu sayede, kullanıcılar ve aynı ada sahip birden fazla bildirim kanalını kontrol edebilirsiniz.

Şekil 2. Şununla bildirim kanalı ayarları: Gruplar'ı kullanabilirsiniz.

Örneğin, bir sosyal ağ uygulaması kişisel ve iş amaçlı bilgileri destekleyebilir hesaplar. Bu senaryoda, her hesap için birden fazla bildirim gerekebilir. aşağıdaki gibi aynı işlevlere ve adlara sahip kanallar:

  • İki kanallı kişisel bir hesap:

    • Yeni yorumlar

    • Yayın önerileri

  • İki kanallı bir işletme hesabı:

    • Yeni yorumlar

    • Yayın önerileri

Bildirim kanallarını her hesap için ayrı gruplar halinde düzenlemek kullanıcıların ve bunları birbirinden ayırt etmektir.

Her bildirim kanalı grubu için bir kimlik gerekir. Bu kimlik, paketinin yanı sıra kullanıcının görebildiği bir ad kullanın. Aşağıdaki snippet, bu anahtar kelimelerin bildirim kanal grubu oluşturun.

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 şu numarayı arayabilirsiniz: setGroup() kullanarak yeni bir NotificationChannel nesnesini ilişkilendirebilirsiniz.

Kanalı bildirim yöneticisine gönderdikten sonra bildirim kanalı ve grup arasındaki ilişkilendirme.