Explication détaillée de la notification (notification de la barre d'état)


Introduction à cette section :

Cette section présente le contrôle utilisé pour afficher les informations de notification dans la barre d'état sous Android : Notification, je crois que la plupart d'entre elles Quiconque étudie Android le connaît, et de nombreux tutoriels sur l'utilisation de Notification sur Internet sont basés sur 2.x, et De nos jours, les appareils Android courants sont essentiellement 4.x ou supérieur, voire 5.0 ou supérieur, leur notification respective ; Ils sont tous différents ! Cette section vous expliquera la notification basée sur 4.x et supérieure, et la notification basée sur 5.0 et supérieure. Nous l'expliquerons dans le chapitre des nouvelles fonctionnalités d'Android 5.0 dans le tutoriel avancé~

Quelques introductions à Notification à partir des documents officiels :

Idées de design : Notifications dans Android 4.4 et versions antérieures

Traduction : Notification

Document API : Notification

Vous aurez peut-être besoin d'une échelle pour accéder au site Web ci-dessus ~


1. Interprétation de la partie du document de conception


1) Disposition de base de la notification

1.png

Ce qui précède Les éléments constitutifs sont :

  • Icône/Photo : Grande icône
  • Titre/Nom : Titre
  • Message : Informations sur le contenu
  • Horodatage : Heure de notification, la valeur par défaut est l'heure à laquelle le système envoie une notification, elle peut également être définie by setWhen()
  • Icône secondaire : petite icône
  • texte de contenu, un texte à gauche de la petite icône

2) Disposition étendue

Dans Jelly Bean, vous pouvez fournir plus de détails sur l'événement pour les notifications. Vous pouvez afficher les premières lignes d'un message ou un aperçu d'une image en étendant la mise en page. Cela permet aux utilisateurs de voir plus de contenu, parfois même l'intégralité du message. Les utilisateurs peuvent pincer, zoomer ou faire glisser avec deux doigts pour ouvrir la mise en page étendue. Android propose deux mises en page étendues (texte et images) pour un seul message que vous pouvez utiliser lors du développement d'applications.

2.png

3.png

Concernant les autres éléments de conception, je ne les mentionnerai pas un par un. Si vous êtes intéressé, consultez la documentation de l'API fournie ci-dessus. . Savoir Cette notification peut varier dans les versions 4.x et supérieures ! Ce à quoi nous prêtons plus attention, c'est Comment écrire du code pour utiliser cette chose ? Apprenons à utiliser Notification !


2. Processus d'utilisation de base de la notification

La barre de notification d'état implique principalement 2 classes : Notification et NotificationManager

Notification  : classe d'informations de notification, qui correspond à chaque attribut de la barre de notification

NotificationManager : est la classe de gestion des notifications de la barre d'état, responsable de l'envoi des notifications, de l'effacement des notifications et d'autres opérations .

Processus de base utilisé :

  • Étape 1. Obtenez l'objet NotificationManager : NotificationManager mNManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  • Étape 2. Créez une classe de construction Builder pour la barre de notification : Notification.Builder mBuilder = new Notification.Builder(this);
  • Étape 3. Définissez les paramètres pertinents pour Builder, tels que le titre, le contenu, l'icône, l'action, etc. !
  • Étape 4.Appelez la méthode Build() de Builder pour attribuer une valeur à la notification
  • Étape 5Appelez la méthode notify() de NotificationManager à envoyer. notification!
  • PS :De plus, nous pouvons également appeler la méthode Cancel() de NotificationManager pour annuler la notification

3. quelques méthodes associées :

Notification.Builder mBuilder = new Notification.Builder(this);

puis appelez les méthodes associées suivantes pour définir : (Document API officiel : Notification.Builder ) Les méthodes couramment utilisées sont les suivantes :

  • setContentTitle(CharSequence) : définir le titre
  • setContentText(CharSequence) : définir le contenu
  • setSubText (CharSequence) : définissez une petite ligne de texte sous le contenu
  • setTicker(CharSequence) : définissez les informations textuelles affichées en haut lors de la réception de notifications
  • setWhen(long) : Définissez l'heure de notification. Généralement, le paramètre est System.currentTimeMillis()
  • setSmallIcon(int) : Définissez la petite icône en bas. coin droit lorsque la notification est reçue. Cette petite icône sera également affichée en haut lors de la réception d'une notification
  • setLargeIcon(Bitmap) : Définissez la grande icône à gauche
  • setAutoCancel(boolean ) : indique si la notification sera annulée après que l'utilisateur a cliqué sur le panneau de notification (non annulé par défaut)
  • setDefaults(int) : Le moyen le plus simple d'ajouter des effets sonores, flash et vibrations aux notifications. En utilisant l'attribut par défaut, vous pouvez combiner plusieurs attributs,
    Notification.DEFAULT_VIBRATE (ajouter un rappel de vibration par défaut) ;
    Notification.DEFAULT_SOUND (ajouter un rappel sonore par défaut) ; ;
    Notification.DEFAULT_LIGHTS(Ajouter un rappel de lumière tricolore par défaut)
    Notification.DEFAULT_ALL(Ajouter par défaut tous les rappels ci-dessus 3)
  • setVibrate(long[]) : définissez le mode de vibration, par exemple :
    setVibrate(new long[] {0,300,500,700}) ; Vibrez ensuite pendant 700 ms. L’utilisation de Vibrer sera expliquée plus tard !
  • setLights(int argb, int onMs, int offMs) : définissez les lumières tricolores, les paramètres sont : la couleur de la lumière, La durée d'éclairage et la durée d'obscurité ne sont pas disponibles pour toutes les couleurs. Cela dépend de l'appareil. Certains téléphones mobiles ne disposent pas de lumières tricolores ; De plus, vous devez définir des indicateurs pour Notification sur Notification.FLAG_SHOW_LIGHTS pour prendre en charge les rappels lumineux à trois couleurs !
  • setSound(Uri) : Définir la sonnerie lors de la réception des notifications. Vous pouvez utiliser le système ou le définir vous-même :
    .setDefaults(Notification. .DEFAULT_SOUND ) //Obtenir la sonnerie par défaut
    .setSound(Uri.parse("file:///sdcard/xx/xx.mp3")) //Obtenir la sonnerie personnalisée
    .setSound(Uri.withAppendedPath (Audio. Media.INTERNAL_CONTENT_URI, "5")) //Obtenez la sonnerie dans la bibliothèque multimédia Android

  • setOngoing(boolean) : défini sur true, indiquant qu'il s'agit d'une notification en cours. Ils sont généralement utilisés pour exprimer Une tâche en arrière-plan dans laquelle l'utilisateur est activement impliqué (comme écouter de la musique) ou attend d'une manière ou d'une autre et occupe donc l'appareil (comme le téléchargement d'un fichier, Fonctionnement synchrone, connexion réseau active)

  • setProgress(int,int,boolean) : Définir la notification avec la barre de progression Les paramètres sont : la valeur maximale de la barre de progression, la progression actuelle et si la progression est incertaine S'il s'agit d'une barre de progression confirmée : appelez setProgress(max, progress, false) pour définir la notification, Lors de la mise à jour de la progression, lancez une notification pour mettre à jour la progression ici et supprimez la barre de progression une fois le téléchargement terminé. , simplement en appelant setProgress(0, 0, false). S'il s'agit d'une barre de progression indéterminée (active en permanence), Cela montre que l'activité se poursuit lorsque la progression du traitement ne peut pas être connue avec précision, donc setProgress(0, 0, true) est appelé , lorsque l'opération se termine, appelez setProgress(0, 0, false) et mettez à jour la notification pour supprimer la barre d'indicateur
  • setContentIntent(PendingIntent) : PendingIntent et Intent sont légèrement différents , il Vous pouvez définir le nombre d'exécutions, Il est principalement utilisé pour les communications de services à distance, les alarmes, les notifications, les lanceurs et les messages texte. Il est rarement utilisé en général. Par exemple, passez ici Activité de démarrage en attente : getActivity (Context, int, Intent, int), bien sûr, vous pouvez également démarrer un service ou une diffusion L'identifiant de bit de PendingIntent (le quatrième paramètre) :
    FLAG_ONE_SHOT signifie que le PendingIntent renvoyé ne peut être exécuté qu'une seule fois et sera automatiquement annulé après l'exécution.
    FLAG_NO_CREATE signifie. que si le PendingIntent décrit n'existe pas, le PendingIntent correspondant ne sera pas créé. Au lieu de cela, NULL
    FLAG_CANCEL_CURRENT sera renvoyé, indiquant que le PendingIntent correspondant existe déjà, puis annulera le premier, et puis créez un nouveau PendingIntent. Ceci est propice au maintien des données à jour et peut être utilisé dans des scénarios de communication pour la messagerie instantanée
    FLAG_UPDATE_CURRENT représente un PendingIntent mis à jour
    Exemple d'utilisation :

    //点击后跳转Activity
    Intent intent = new Intent(context,XXX.class);  
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);  
    mBuilder.setContentIntent(pendingIntent)


  • setPriority(int) : Définir la priorité :

    优先级用户
    MAX重要而紧急的通知,通知用户这个事件是时间上紧迫的或者需要立即处理的。
    HIGH高优先级用于重要的通信内容,例如短消息或者聊天,这些都是对用户来说比较有兴趣的。
    DEFAULT默认优先级用于没有特殊优先级分类的通知。
    LOW低优先级可以通知用户但又不是很紧急的事件。
    MIN用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。
    Attributs correspondants : Notification.PRIORITY_HIGH...

4. Exemple de code : La notification la plus courante :

Écrivons l'exemple le plus simple ci-dessous. Découvrez l'utilisation de Notification :

Rendu en cours  :

4.gif

Code clé  :

Publier le code de MainActivity.java directement ici :

classe publique MainActivity étend AppCompatActivity implémente View.OnClickListener {

    private Context mContext;
    private NotificationManager mNManager;
    private Notification notify1;
    Bitmap Large Bitmap = null;
    private static final int NOTIFYID_1 = 1;

    private Button btn_show_normal;
    private Button btn_close_normal;


    @Override
    protected void onCreate(B undle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = MainActivity.this;
        //创建大图标的Bitmap
        LargeBitmap = BitmapFactory.decodeResource(getResources( ), R.mipmap.iv_lc_icon);
        mNManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        bindView();

    }


    private void bindView() {
        btn_show_normal = (Bouton) findViewById(R.id.btn_show_normal);
        btn_close_normal = (Bouton) findViewById(R.id.btn_close_normal);
        btn_show_normal.set OnClickListener(this);
        btn_close_normal. setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id .btn_show_normal:
                //定义一个PendingIntent点击Notification后启动一个Activity
                Intent it = new Intent(mContext, OtherActivity.class);
               PendingIntent pit = PendingIntent.getActivity(mContext, 0, it, 0 );

                                                                                                                                                                                 Chen") //Titre
.setContentText("J'ai cent façons de vous empêcher de rester~") //Contenu
.setSubText("——Rappelez-vous que je m'appelle Ye Liangchen") //Un court paragraphe de texte sous le contenu
               .setTicker("Reçu le message envoyé par Ye Liangchen~")                                                                                                                       . ​​.setDefaults(Notification.DEFAULT_LIGHTS | Notification .DEFAULT_VIBRATE)​//Définir les lumières tricolores et le vibrateur par défaut
.setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.biaobiao)) //Définir un son d'invite personnalisé
.setAutoCancel(true) //Définir l'annulation Notification
après avoir cliqué sur .setContentIntent(pit);                mNManager.notify(NOTIFYID_1, notify1); > case R.id.btn_close_normal:
//En plus d'annuler la notification en fonction de l'ID, vous pouvez également appeler CancelAll()                               
                                                                                    5. Téléchargement de l'exemple de code :

NotificationDemo.zip


Résumé de cette section :


D'accord, cette section présente la notification en 4. L'utilisation de base de la version Recherche~ D'ailleurs, une partie de cette rubrique fait référence au blog suivant, postez le lien, vous pouvez aussi le lire : Etude approfondie de l'intégration de la barre de notification Android Notification (une DEMO permet de bien la comprendre) C'est écrit en assez détaillé~ C'est tout pour cette section, merci~