Android - Notifications

UNE notificationest un message que vous pouvez afficher à l'utilisateur en dehors de l'interface utilisateur normale de votre application. Lorsque vous demandez au système d'émettre une notification, celle-ci apparaît d'abord sous forme d'icône dans la zone de notification. Pour voir les détails de la notification, l'utilisateur ouvre le tiroir de notification. La zone de notification et le tiroir de notification sont des zones contrôlées par le système que l'utilisateur peut afficher à tout moment.

Android Toast La classe fournit un moyen pratique d'afficher les alertes des utilisateurs, mais le problème est que ces alertes ne sont pas persistantes, ce qui signifie que l'alerte clignote à l'écran pendant quelques secondes, puis disparaît.

Pour voir les détails de la notification, vous devrez sélectionner l'icône qui affichera le tiroir de notification contenant des détails sur la notification. Tout en travaillant avec l'émulateur avec un périphérique virtuel, vous devrez cliquer et faire glisser la barre d'état vers le bas pour la développer, ce qui vous donnera des détails comme suit. Ce sera juste64 dp grand et appelé vue normale.

La forme développée ci-dessus peut avoir un Big Viewqui aura des détails supplémentaires sur la notification. Vous pouvez ajouter jusqu'à six lignes supplémentaires dans la notification. La capture d'écran suivante montre une telle notification.

Créer et envoyer des notifications

Vous disposez d'un moyen simple de créer une notification. Suivez les étapes suivantes dans votre application pour créer une notification -

Étape 1 - Créer un générateur de notifications

La première étape consiste à créer un générateur de notification à l'aide de NotificationCompat.Builder.build () . Vous utiliserez Notification Builder pour définir diverses propriétés de notification telles que ses petites et grandes icônes, son titre, sa priorité, etc.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)

Étape 2 - Définition des propriétés de notification

Une fois que tu as Builderobjet, vous pouvez définir ses propriétés de notification à l'aide de l'objet Builder selon vos besoins. Mais il est obligatoire de définir au moins suivant -

  • Une petite icône, définie par setSmallIcon()

  • Un titre, défini par setContentTitle()

  • Texte détaillé, défini par setContentText()

mBuilder.setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentTitle("Notification Alert, Click Me!");
mBuilder.setContentText("Hi, This is Android Notification Detail!");

Vous disposez de nombreuses propriétés facultatives que vous pouvez définir pour votre notification. Pour en savoir plus à leur sujet, consultez la documentation de référence de NotificationCompat.Builder.

Étape 3 - Joindre des actions

Il s'agit d'une partie facultative et obligatoire si vous souhaitez joindre une action à la notification. Une action permet aux utilisateurs de passer directement de la notification à unActivity dans votre application, où ils peuvent consulter un ou plusieurs événements ou effectuer des travaux supplémentaires.

L'action est définie par un PendingIntent contenant un Intentqui démarre une activité dans votre application. Pour associer PendingIntent à un geste, appelez la méthode appropriée de NotificationCompat.Builder . Par exemple, si vous souhaitez démarrer l'activité lorsque l'utilisateur clique sur le texte de notification dans le tiroir de notification, vous ajoutez le PendingIntent en appelantsetContentIntent().

Un objet PendingIntent vous aide à effectuer une action au nom de vos applications, souvent à une date ultérieure, sans vous soucier de savoir si votre application est en cours d'exécution ou non.

Nous prenons l'aide de l'objet générateur de pile qui contiendra une pile arrière artificielle pour l'activité démarrée. Cela garantit que la navigation en arrière depuis l'activité mène de votre application à l'écran d'accueil.

Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);

// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);

Étape 4 - Émettez la notification

Enfin, vous transmettez l'objet Notification au système en appelant NotificationManager.notify () pour envoyer votre notification. Assurez-vous d'appelerNotificationCompat.Builder.build()sur l'objet générateur avant de le notifier. Cette méthode combine toutes les options qui ont été définies et renvoie un nouveauNotification objet.

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
// notificationID allows you to update the notification later on.
mNotificationManager.notify(notificationID, mBuilder.build());

La classe NotificationCompat.Builder

La classe NotificationCompat.Builder permet un contrôle plus facile sur tous les indicateurs, ainsi qu'une aide à la construction des dispositions de notification typiques. Voici quelques méthodes importantes et les plus fréquemment utilisées disponibles dans le cadre de la classe NotificationCompat.Builder.

N ° Sr. Constantes et description
1

Notification build()

Combinez toutes les options qui ont été définies et renvoyez un nouvel objet Notification.

2

NotificationCompat.Builder setAutoCancel (boolean autoCancel)

La définition de cet indicateur fera en sorte que la notification soit automatiquement annulée lorsque l'utilisateur clique dessus dans le panneau.

3

NotificationCompat.Builder setContent (RemoteViews views)

Fournissez un RemoteViews personnalisé à utiliser à la place de celui standard.

4

NotificationCompat.Builder setContentInfo (CharSequence info)

Définissez le grand texte sur le côté droit de la notification.

5

NotificationCompat.Builder setContentIntent (PendingIntent intent)

Fournissez un PendingIntent à envoyer lorsque l'utilisateur clique sur la notification.

6

NotificationCompat.Builder setContentText (CharSequence text)

Définissez le texte (deuxième ligne) de la notification, dans une notification standard.

sept

NotificationCompat.Builder setContentTitle (CharSequence title)

Définissez le texte (première ligne) de la notification, dans une notification standard.

8

NotificationCompat.Builder setDefaults (int defaults)

Définissez les options de notification par défaut qui seront utilisées.

9

NotificationCompat.Builder setLargeIcon (Bitmap icon)

Définissez la grande icône qui s'affiche dans le téléscripteur et la notification.

dix

NotificationCompat.Builder setNumber (int number)

Définissez le grand nombre sur le côté droit de la notification.

11

NotificationCompat.Builder setOngoing (boolean ongoing)

Définissez s'il s'agit d'une notification en cours.

12

NotificationCompat.Builder setSmallIcon (int icon)

Définissez la petite icône à utiliser dans les dispositions de notification.

13

NotificationCompat.Builder setStyle (NotificationCompat.Style style)

Ajoutez un style de notification riche à appliquer au moment de la construction.

14

NotificationCompat.Builder setTicker (CharSequence tickerText)

Définissez le texte qui s'affiche dans la barre d'état lorsque la notification arrive pour la première fois.

15

NotificationCompat.Builder setVibrate (long[] pattern)

Définissez le modèle de vibration à utiliser.

16

NotificationCompat.Builder setWhen (long when)

Définissez l'heure à laquelle l'événement s'est produit. Les notifications du panneau sont triées par heure.

Exemple

L'exemple suivant montre la fonctionnalité d'une notification Android à l'aide d'un NotificationCompat.Builder Classe qui a été introduite dans Android 4.1.

Étape La description
1 Vous utiliserez l'IDE de studio Android pour créer une application Android et la nommerez comme tutorialspoint sous un package com.example.notificationdemo .
2 Modifiez le fichier src / MainActivity.java et ajoutez le code à notifier (""), si l'utilisateur clique sur le bouton, il appellera le service de notification Android.
3 Créez un nouveau fichier Java src / NotificationView.java , qui sera utilisé pour afficher la nouvelle mise en page dans le cadre d'une nouvelle activité qui sera démarrée lorsque l'utilisateur cliquera sur l'une des notifications
4 Modifiez le fichier XML de mise en page res / layout / activity_main.xml pour ajouter le bouton de notification dans la mise en page relative.
5 Créez un nouveau fichier XML de mise en page res / layout / notification.xml . Il sera utilisé comme fichier de mise en page pour une nouvelle activité qui démarrera lorsque l'utilisateur cliquera sur l'une des notifications.
6 Pas besoin de changer les constantes de chaîne par défaut. Android Studio prend en charge les constantes de chaîne par défaut
sept Exécutez l'application pour lancer l'émulateur Android et vérifiez le résultat des modifications effectuées dans l'application.

Voici le contenu du fichier d'activité principal modifié src/com.example.notificationdemo/MainActivity.java. Ce fichier peut inclure chacune des méthodes fondamentales du cycle de vie.

package com.example.notificationdemo;

import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
   Button b1;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1 = (Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            addNotification();
         }
      });
   }

   private void addNotification() {
      NotificationCompat.Builder builder =
         new NotificationCompat.Builder(this)
         .setSmallIcon(R.drawable.abc)
         .setContentTitle("Notifications Example")
         .setContentText("This is a test notification");

      Intent notificationIntent = new Intent(this, MainActivity.class);
      PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
         PendingIntent.FLAG_UPDATE_CURRENT);
      builder.setContentIntent(contentIntent);

      // Add as notification
      NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      manager.notify(0, builder.build());
   }
}

Voici le contenu de res/layout/notification.xml fichier -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent" >
   
   <TextView
      android:layout_width="fill_parent"
      android:layout_height="400dp"
      android:text="Hi, Your Detailed notification view goes here...." />
</LinearLayout>

Voici le contenu du fichier d'activité principal modifié src/com.example.notificationdemo/NotificationView.java.

package com.example.notificationdemo;

import android.os.Bundle;
import android.app.Activity;

public class NotificationView extends Activity{
   @Override
   public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.notification);
   }
}

Voici le contenu de res/layout/activity_main.xml fichier -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Notification Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="48dp" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="42dp" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Notification"
      android:id="@+id/button"
      android:layout_marginTop="62dp"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />
      
</RelativeLayout>

Voici le contenu de res/values/strings.xml pour définir deux nouvelles constantes -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="action_settings">Settings</string>
   <string name="app_name">tutorialspoint </string>  
</resources>

Voici le contenu par défaut de AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.notificationdemo" >
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.notificationdemo.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
            
      </activity>
      
      <activity android:name=".NotificationView"
         android:label="Details of notification"
         android:parentActivityName=".MainActivity">
         <meta-data
         android:name="android.support.PARENT_ACTIVITY"
         android:value=".MainActivity"/>
      </activity>
      
   </application>
</manifest>

Essayons d'exécuter votre tutorialspointapplication. Je suppose que vous avez créé votreAVDlors de la configuration de l'environnement. Pour exécuter l'application depuis Android Studio, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Android Studio installe l'application sur votre AVD et la démarre et si tout va bien avec votre configuration et votre application, elle affichera la fenêtre Emulator suivante -

Cliquez maintenant button, vous verrez en haut un message "New Message Alert!" s'affichera momentanément et après cela, vous aurez l'écran suivant avec une petite icône dans le coin supérieur gauche.

Maintenant, développons la vue, cliquez longuement sur la petite icône, après une seconde, il affichera les informations de date et c'est le moment où vous devez faire glisser la barre d'état vers le bas sans relâcher la souris. Vous verrez la barre d'état se développer et vous obtiendrez l'écran suivant -

Notification Big View

L'extrait de code suivant montre comment modifier la notification créée dans l'extrait de code précédent pour utiliser le style de grande vue de la boîte de réception. Je vais mettre à jour la méthode de modification displayNotification () pour afficher cette fonctionnalité -

protected void displayNotification() {
   Log.i("Start", "notification");

   /* Invoking the default notification service */
   NotificationCompat.Builder  mBuilder = new NotificationCompat.Builder(this);
   
   mBuilder.setContentTitle("New Message");
   mBuilder.setContentText("You've received new message.");
   mBuilder.setTicker("New Message Alert!");
   mBuilder.setSmallIcon(R.drawable.woman);
   
   /* Increase notification number every time a new notification arrives */
   mBuilder.setNumber(++numMessages);
   
   /* Add Big View Specific Configuration */
   NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
   
   String[] events = new String[6];
   events[0] = new String("This is first line....");
   events[1] = new String("This is second line...");
   events[2] = new String("This is third line...");
   events[3] = new String("This is 4th line...");
   events[4] = new String("This is 5th line...");
   events[5] = new String("This is 6th line...");
   
   // Sets a title for the Inbox style big view
   inboxStyle.setBigContentTitle("Big Title Details:");
   
   // Moves events into the big view
   for (int i=0; i < events.length; i++) {
      inboxStyle.addLine(events[i]);
   }
   
   mBuilder.setStyle(inboxStyle);
   
   /* Creates an explicit intent for an Activity in your app */
   Intent resultIntent = new Intent(this, NotificationView.class);
   
   TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
   stackBuilder.addParentStack(NotificationView.class);

   /* Adds the Intent that starts the Activity to the top of the stack */
   stackBuilder.addNextIntent(resultIntent);
   PendingIntent resultPendingIntent =stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
   
   mBuilder.setContentIntent(resultPendingIntent);
   mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
   
   /* notificationID allows you to update the notification later on. */
   mNotificationManager.notify(notificationID, mBuilder.build());
}

Maintenant, si vous essayez d'exécuter votre application, vous trouverez le résultat suivant sous la forme développée de la vue -