it-swarm.com.de

So verwenden Sie Notification.Builder

Ich habe festgestellt, dass ich eine veraltete Methode für Benachrichtigungen verwende (notification.setLatestEventInfo ())

Es heißt, Notification.Builder zu verwenden.

  • Wie verwende ich es?

Wenn ich versuche, eine neue Instanz zu erstellen, wird mir Folgendes mitgeteilt:

Notification.Builder cannot be resolved to a type
98
Saariko

This ist in API 11 enthalten. Wenn Sie also für eine frühere Version als 3.0 entwickeln, sollten Sie weiterhin die alte API verwenden.

Update : Die NotificationCompat.Builder-Klasse wurde zum Support Package hinzugefügt, sodass wir diese verwenden können, um API-Version 4 und höher zu unterstützen:

http://developer.Android.com/reference/Android/support/v4/app/NotificationCompat.Builder.html

86
Femi

Notification.Builder API 11 oder NotificationCompat.Builder API 1

Dies ist ein Anwendungsbeispiel.

Intent notificationIntent = new Intent(ctx, YourClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(ctx,
        YOUR_PI_REQ_CODE, notificationIntent,
        PendingIntent.FLAG_CANCEL_CURRENT);

NotificationManager nm = (NotificationManager) ctx
        .getSystemService(Context.NOTIFICATION_SERVICE);

Resources res = ctx.getResources();
Notification.Builder builder = new Notification.Builder(ctx);

builder.setContentIntent(contentIntent)
            .setSmallIcon(R.drawable.some_img)
            .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.some_big_img))
            .setTicker(res.getString(R.string.your_ticker))
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setContentTitle(res.getString(R.string.your_notif_title))
            .setContentText(res.getString(R.string.your_notif_text));
Notification n = builder.build();

nm.notify(YOUR_NOTIF_ID, n);
151
Rabi

zusätzlich zu der ausgewählten Antwort gibt es hier einen Beispielcode für das NotificationCompat.Builder Klasse von Source Tricks :

// Add app running notification  

    private void addNotification() {



    NotificationCompat.Builder builder =  
            new NotificationCompat.Builder(this)  
            .setSmallIcon(R.drawable.ic_launcher)  
            .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(FM_NOTIFICATION_ID, builder.build());  
}  

// Remove notification  
private void removeNotification() {  
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
    manager.cancel(FM_NOTIFICATION_ID);  
}  
70
ANemati

Der Benachrichtigungs-Generator ist ausschließlich für Android API Level 11 und höher (Android 3.0 und höher).

Wenn Sie nicht auf Honeycomb-Tablets abzielen, sollten Sie daher nicht den Benachrichtigungs-Generator verwenden, sondern ältere Methoden zum Erstellen von Benachrichtigungen wie die folgenden befolgen Beispiel .

4
Ye Myat Min

UPDATE Android-N (März 2016)

Bitte besuchen Sie Notifications Updates Link für weitere Details.

  • Direkte Antwort
  • Gebündelte Benachrichtigungen
  • Benutzerdefinierte Ansichten

Mit Android N können Sie auch ähnliche Benachrichtigungen bündeln, um sie als einzelne Benachrichtigung anzuzeigen. Um dies zu ermöglichen, verwendet Android N die vorhandene NotificationCompat.Builder.setGroup() -Methode. Benutzer können jede der Benachrichtigungen erweitern und Aktionen wie Antworten und Abweisen für jede der Benachrichtigungen ausführen. einzeln aus dem Benachrichtigungsschatten.

Dies ist ein bereits vorhandenes Beispiel, das einen einfachen Dienst zeigt, der Benachrichtigungen mit NotificationCompat sendet. Jede ungelesene Konversation eines Benutzers wird als separate Benachrichtigung gesendet.

Dieses Beispiel wurde aktualisiert, um die neuen Benachrichtigungsfunktionen zu nutzen, die in Android N verfügbar sind.

Beispielcode .

3
Amit Vaghela

Beim Erstellen von Benachrichtigungen ist ein Problem aufgetreten (Entwicklung nur für Android 4.0+). Dieser Link hat mir genau gezeigt, was ich falsch gemacht habe, und Folgendes gesagt:

Required notification contents

A Notification object must contain the following:

A small icon, set by setSmallIcon()
A title, set by setContentTitle()
Detail text, set by setContentText()

Im Grunde fehlte mir eines davon. Stellen Sie als Grundlage für die Fehlerbehebung sicher, dass Sie mindestens alle diese Informationen haben. Hoffentlich erspart dies jemand anderem Kopfschmerzen.

2
Nlinscott

Ich habe benutzt

Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Firebase Push Notification")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
1
Nilesh Panchal

Es funktioniert sogar in API 8, Sie können diesen Code verwenden:

 Notification n = 
   new Notification(R.drawable.yourownpicturehere, getString(R.string.noticeMe), 
System.currentTimeMillis());

PendingIntent i=PendingIntent.getActivity(this, 0,
             new Intent(this, NotifyActivity.class),
                               0);
n.setLatestEventInfo(getApplicationContext(), getString(R.string.title), getString(R.string.message), i);
n.number=++count;
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.flags |= Notification.DEFAULT_SOUND;
n.flags |= Notification.DEFAULT_VIBRATE;
n.ledARGB = 0xff0000ff;
n.flags |= Notification.FLAG_SHOW_LIGHTS;

// Now invoke the Notification Service
String notifService = Context.NOTIFICATION_SERVICE;
NotificationManager mgr = 
   (NotificationManager) getSystemService(notifService);
mgr.notify(NOTIFICATION_ID, n);

Oder ich schlage vor, einem hervorragenden Tutorial zu folgen

1
dondondon

Falls es jemandem hilft ... Ich hatte große Probleme beim Einrichten von Benachrichtigungen mithilfe des Support-Pakets beim Testen mit neueren und älteren APIs. Ich konnte sie auf dem neueren Gerät zum Laufen bringen, aber auf dem alten Gerät wurde ein Fehlertest durchgeführt. Schließlich funktionierte es für mich, alle mit den Benachrichtigungsfunktionen verbundenen Importe zu löschen. Insbesondere der NotificationCompat und der TaskStackBuilder. Es scheint, dass beim Einrichten meines Codes am Anfang die Importe aus dem neueren Build und nicht aus dem Support-Paket hinzugefügt wurden. Als ich diese Elemente später in Eclipse implementieren wollte, wurde ich nicht aufgefordert, sie erneut zu importieren. Hoffe das macht Sinn und dass es jemand anderem hilft :)

1
snatr

Eigenständiges Beispiel

Gleiche Technik wie in diese Antwort aber:

  • in sich geschlossen: kopiere und füge es ein und es wird kompiliert und ausgeführt
  • mit einer Schaltfläche können Sie so viele Benachrichtigungen generieren, wie Sie möchten, und mit Absichts- und Benachrichtigungs-IDs spielen

Quelle:

import Android.app.Activity;
import Android.app.Notification;
import Android.app.NotificationManager;
import Android.app.PendingIntent;
import Android.content.Context;
import Android.content.Intent;
import Android.graphics.Color;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;

public class Main extends Activity {
    private int i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Button button = new Button(this);
        button.setText("click me");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Notification notification = new Notification.Builder(Main.this)
                        /* Make app open when you click on the notification. */
                        .setContentIntent(PendingIntent.getActivity(
                                Main.this,
                                Main.this.i,
                                new Intent(Main.this, Main.class),
                                PendingIntent.FLAG_CANCEL_CURRENT))
                        .setContentTitle("title")
                        .setAutoCancel(true)
                        .setContentText(String.format("id = %d", Main.this.i))
                        // Starting on Android 5, only the alpha channel of the image matters.
                        // https://stackoverflow.com/a/35278871/895245
                        // `Android.R.drawable` resources all seem suitable.
                        .setSmallIcon(Android.R.drawable.star_on)
                        // Color of the background on which the alpha image wil drawn white.
                        .setColor(Color.RED)
                        .build();
                final NotificationManager notificationManager =
                        (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(Main.this.i, notification);
                // If the same ID were used twice, the second notification would replace the first one. 
                //notificationManager.notify(0, notification);
                Main.this.i++;
            }
        });
        this.setContentView(button);
    }
}

Getestet in Android 22.

          // This is a working Notification
       private static final int NotificID=01;
   b= (Button) findViewById(R.id.btn);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Notification notification=new       Notification.Builder(MainActivity.this)
                    .setContentTitle("Notification Title")
                    .setContentText("Notification Description")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .build();
            NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            notification.flags |=Notification.FLAG_AUTO_CANCEL;
            notificationManager.notify(NotificID,notification);


        }
    });
}
0