Recherche…


Introduction

Les canaux de notification nous permettent aux développeurs d'applications de regrouper nos notifications en groupes (canaux), l'utilisateur ayant la possibilité de modifier les paramètres de notification pour l'ensemble du canal.

Syntaxe

  1. class NotificationUtils {} // Pour créer un canal de notification
  2. createChannel () // Méthode générique de création de notification

Paramètres

Méthode La description
IMPORTANCE_MAX inutilisé
IMPORTANCE_HIGH montre partout, fait du bruit et regarde
IMPORTANCE_DEFAULT montre partout, fait du bruit, mais ne s'immisce pas visuellement
IMPORTANCE_LOW montre partout, mais n'est pas intrusif
IMPORTANCE_MIN montre seulement à l'ombre, au-dessous du pli
IMPORTANCE_NONE une notification sans importance; ne se montre pas à l'ombre

Canal de notification

Que sont les canaux de notification?

Les canaux de notification nous permettent aux développeurs d'applications de regrouper nos notifications en groupes (canaux), l'utilisateur pouvant modifier les paramètres de notification pour l'ensemble du canal en même temps. Par exemple, pour chaque canal, les utilisateurs peuvent complètement bloquer toutes les notifications, remplacer le niveau d'importance ou autoriser l'affichage d'un badge de notification. Cette nouvelle fonctionnalité permet d'améliorer considérablement l'expérience utilisateur d'une application.

Créer des canaux de notification

 import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Color;
 
public class NotificationUtils extends ContextWrapper {


private NotificationManager mManager;
public static final String ANDROID_CHANNEL_ID = "com.sai.ANDROID";
public static final String IOS_CHANNEL_ID = "com.sai.IOS";
public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL";
public static final String IOS_CHANNEL_NAME = "IOS CHANNEL";

public NotificationUtils(Context base) {
    super(base);
    createChannels();
}

public void createChannels() {

    // create android channel
    NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
            ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
    // Sets whether notifications posted to this channel should display notification lights
    androidChannel.enableLights(true);
    // Sets whether notification posted to this channel should vibrate.
    androidChannel.enableVibration(true);
    // Sets the notification light color for notifications posted to this channel
    androidChannel.setLightColor(Color.BLUE);
    // Sets whether notifications posted to this channel appear on the lockscreen or not
    androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);

    getManager().createNotificationChannel(androidChannel);

    // create ios channel
    NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID,
            IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
    iosChannel.enableLights(true);
    iosChannel.enableVibration(true);
    iosChannel.setLightColor(Color.GRAY);
    iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
    getManager().createNotificationChannel(iosChannel);


  }


private NotificationManager getManager() {
    if (mManager == null) {
        mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    }
    return mManager;
}}

Dans le code ci-dessus, nous avons créé deux instances de NotificationChannel, en transmettant uniqueid un nom de canal, ainsi qu'un niveau d'importance dans son constructeur. Pour chaque canal de notification, nous avons appliqué les caractéristiques suivantes.

  1. Du son
  2. Lumières
  3. Vibration
  4. Notification à afficher sur l'écran de verrouillage.

Enfin, nous avons obtenu le NotificationManager du système, puis enregistré le canal en appelant la méthode createNotificationChannel (), en passant le canal que nous avons créé.

Nous pouvons créer plusieurs canaux de notification à la fois avec createNotificationChannels (), en transmettant une liste Java d'instances NotificationChannel. Vous pouvez obtenir tous les canaux de notification pour une application avec getNotificationChannels () et obtenir un canal spécifique avec getNotificationChannel (), en ne transmettant que l'ID du canal comme argument.

Niveau d'importance dans les canaux de notification

Méthode La description
IMPORTANCE_MAX inutilisé
IMPORTANCE_HIGH montre partout, fait du bruit et regarde
IMPORTANCE_DEFAULT montre partout, fait du bruit, mais ne s'immisce pas visuellement
IMPORTANCE_LOW montre partout, mais n'est pas intrusif, la valeur est 0
IMPORTANCE_MIN montre seulement à l'ombre, au-dessous du pli
IMPORTANCE_NONE une notification sans importance; ne se montre pas à l'ombre

Créer une notification et publier sur le canal

Nous avons créé deux notifications en utilisant NotificationUtils une autre en utilisant NotificationBuilder.

public Notification.Builder getAndroidChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}
 
public Notification.Builder getIosChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}

Nous pouvons également définir NotificationChannel en utilisant Notification.Builder (). Pour cela, nous pouvons utiliser setChannel (String channelId) .

Mettre à jour les paramètres du canal de notification

Une fois que vous créez un canal de notification, l'utilisateur est responsable de ses paramètres et de son comportement. Vous pouvez appeler createNotificationChannel () à nouveau pour renommer un canal de notification existant ou mettre à jour sa description. L'exemple de code suivant décrit comment vous pouvez rediriger un utilisateur vers les paramètres d'un canal de notification en créant une intention de démarrer une activité. Dans ce cas, l'intention requiert des données étendues, notamment l'ID du canal de notification et le nom du package de votre application.

@Override
protected void onCreate(Bundle savedInstanceState) {
    //...
    Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings);
    buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() {
     
        @Override
        public void onClick(View view) {
            Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
            i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
            i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
            startActivity(i);
        }
    });
}

Fichier XML:

<!--...-->
<Button
    android:id="@+id/btn_android_notif_settings"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Notification Settings"/>
<!--...-->

Suppression du canal de notification

Vous pouvez supprimer les canaux de notification en appelant deleteNotificationChannel ().

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);

Maintenant, créez MainActivity et xml

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_margin="16dp"
        tools:context="com.chikeandroid.tutsplusalerts.MainActivity">
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ Android Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_android_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"/>
 
        <EditText
                android:id="@+id/et_android_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
         
        <Button
                android:id="@+id/btn_send_android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="20dp">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ IOS Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_ios_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"
                />
 
        <EditText
                android:id="@+id/et_ios_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
        <Button
                android:id="@+id/btn_send_ios"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
     
</LinearLayout>

MainActivity.java

nous allons éditer notre MainActivity pour que nous puissions obtenir le titre et l'auteur des composants EditText, puis les envoyer au canal Android. Nous obtenons le Notification.Builder pour le canal Android que nous avons créé dans notre NotificationUtils, puis nous notifions le NotificationManager.

import android.app.Notification; importer android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; importer android.view.View; import android.widget.Button; import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
 
    private NotificationUtils mNotificationUtils;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mNotificationUtils = new NotificationUtils(this);
 
        final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title);
        final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author);
        Button buttonAndroid = (Button) findViewById(R.id.btn_send_android);
 
        buttonAndroid.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String title = editTextTitleAndroid.getText().toString();
                String author = editTextAuthorAndroid.getText().toString();
 
                if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) {
                    Notification.Builder nb = mNotificationUtils.
                            getAndroidChannelNotification(title, "By " + author);
 
                    mNotificationUtils.getManager().notify(107, nb.build());
                }
            }
        });
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow