web-dev-qa-db-fra.com

Notifications locales dans Android?

Dans iOS, une "Notification locale" est utilisée par une application lorsqu'elle est en arrière-plan, pour informer l'utilisateur que quelque chose s'est produit, qu'il peut vouloir faire attention à:

Notifications locales ... pour informer les utilisateurs lorsque de nouvelles données deviennent disponibles pour votre application, même lorsque votre application ne s'exécute pas au premier plan. Par exemple, une application de messagerie peut informer l'utilisateur de l'arrivée d'un nouveau message et une application de calendrier peut informer l'utilisateur d'un rendez-vous à venir.

Apple dev - Présentation des notifications locales et distantes

[Son "local" si l'application elle-même fournit les nouvelles données; "distant" si un serveur distant envoie la mise à jour.]

Existe-t-il un équivalent sur Android?

45
Arsalan Haider

Utilisez NotificationCompat.Builder si vous ciblez également d'anciennes API.

    Intent intent = new Intent(ctx, HomeActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder b = new NotificationCompat.Builder(ctx);

    b.setAutoCancel(true)
     .setDefaults(Notification.DEFAULT_ALL)
     .setWhen(System.currentTimeMillis())         
     .setSmallIcon(R.drawable.ic_launcher)
     .setTicker("Hearty365")            
     .setContentTitle("Default notification")
     .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
     .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
     .setContentIntent(contentIntent)
     .setContentInfo("Info");


    NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, b.build());
40
Sumoanand

LocalBroadcastManager ressemble à une meilleure solution: http://developer.Android.com/reference/Android/support/v4/content/LocalBroadcastManager.html Créez votre propre action d'intention personnalisée, diffusez-la dans votre processus, et assurez-vous que toute activité, etc. est enregistrée comme récepteur à cette fin.

5
qix

Si vous souhaitez déclencher une notification locale avec des données volumineuses, c'est-à-dire avec du texte multiligne dans une seule notification avec titre, ticker, icône, son .. utilisez le code suivant .. Je pense que cela vous aidera ..

   Intent notificationIntent = new Intent(context,
            ReminderListActivity.class);



    notificationIntent.putExtra("clicked", "Notification Clicked");
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP); // To open only one activity


        // Invoking the default notification service 

        NotificationManager mNotificationManager;
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                context);
        Uri uri = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        mBuilder.setContentTitle("Reminder");
        mBuilder.setContentText("You have new Reminders.");
        mBuilder.setTicker("New Reminder Alert!");
        mBuilder.setSmallIcon(R.drawable.clock);
        mBuilder.setSound(uri);
        mBuilder.setAutoCancel(true);

        // Add Big View Specific Configuration 
        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
        String[] events = null;

            events[0] = new String("Your first line text ");
            events[1] = new String(" Your second line text");



        // Sets a title for the Inbox style big view
        inboxStyle.setBigContentTitle("You have Reminders:");

        // 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(context,
                ReminderListActivity.class);

        TaskStackBuilder stackBuilder = TaskStackBuilder
                .create(context);
        stackBuilder.addParentStack(ReminderListActivity.class);


        // Adds the Intent that starts the Activity to the top of the stack


        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent = stackBuilder
                .getPendingIntent(0, PendingIntent.FLAG_CANCEL_CURRENT);

        mBuilder.setContentIntent(resultPendingIntent);
        mNotificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);


        // notificationID allows you to update the notification later  on.


        mNotificationManager.notify(999, mBuilder.build());
4
Pratibha Sarode