web-dev-qa-db-de.com

Implementieren Sie das Erweitern und Reduzieren der Benachrichtigung für Android

Ich muss die Erweiterungs- und Minimierungsbenachrichtigung in der Statusleiste für Android 4.0 und höher implementieren. Ich habe bei Google danach gesucht, aber keine Codelösung für die Implementierung erhalten. Ich habe keine Ahnung, wie ich das implementieren soll

Danke im Voraus

27
Pratik

Eine erweiterbare Notification ist ein Sonderfall einer NotificationBig View . Befindet sich der Big View nicht oben in der Benachrichtigungsleiste, wird er als geschlossen angezeigt und kann durch Wischen erweitert werden. Zitat von Android-Entwicklern:

Die große Ansicht einer Benachrichtigung wird nur angezeigt, wenn die Benachrichtigung erweitert wird. Dies geschieht, wenn sich die Benachrichtigung oben in der Benachrichtigungsleiste befindet oder wenn der Benutzer die Benachrichtigung mit einer Geste erweitert. Erweiterte Benachrichtigungen sind ab Android 4.1 verfügbar.

Die Big ViewNotification kann wie folgt erstellt werden:

Notification notification = new Notification.BigTextStyle(builder)
.bigText(myText).build();

oder

Notification notification = new Notification.BigPictureStyle(builder)
.bigPicture(
  BitmapFactory.decodeResource(getResources(),
    R.drawable.my_picture)).build();

Hier ist ein Tutorial.

40
Gunnar Karlsson
Notification noti = new Notification.Builder()
... // The same notification properties as the others
.setStyle(new Notification.BigPictureStyle().bigPicture(mBitmap))
.build();

Sie ändern 

.setStyle(new NotificationCompat.BigTextStyle().bigText(th_alert))

zusammen mit der Ankündigung OK !!! 

notification = new NotificationCompat.Builder(context)

Hier ist ein Beispiel: 

 enter image description here Sie können Code einstellen 

Intent intent = new Intent(context, ReserveStatusActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
NotificationManager notificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
intent = new Intent(String.valueOf(PushActivity.class));
intent.putExtra("message", MESSAGE);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(PushActivity.class);
stackBuilder.addNextIntent(intent);
// PendingIntent pendingIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

// Android.support.v4.app.NotificationCompat.BigTextStyle bigStyle = new     NotificationCompat.BigTextStyle();
// bigStyle.bigText((CharSequence) context);

notification = new NotificationCompat.Builder(context)
    .setSmallIcon(R.mipmap.ic_launcher)
    .setContentTitle(th_title)
    .setContentText(th_alert)
    .setAutoCancel(true)
 // .setStyle(new Notification.BigTextStyle().bigText(th_alert)  ตัวเก่า
 // .setStyle(new NotificationCompat.BigTextStyle().bigText(th_title))
    .setStyle(new NotificationCompat.BigTextStyle().bigText(th_alert))
    .setContentIntent(pendingIntent)
    .setNumber(++numMessages)
    .build();

notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
notificationManager.notify(1000, notification);

oder 

 private void sendNotification(RemoteMessage.Notification notification, Map<String, String> data) {
        Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.logo);

        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);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
               // .setContentTitle(notification.getTitle())
                .setContentTitle(getResources().getText(R.string.app_name))
                .setContentText(notification.getBody())
                .setAutoCancel(true)
                .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                .setContentIntent(pendingIntent)
                .setStyle(new NotificationCompat.BigTextStyle().bigText(notification.getBody()))
                .setContentInfo(notification.getTitle())
                .setLargeIcon(icon)
                .setColor(Color.RED)
                .setSmallIcon(R.drawable.logo);

        try {
            String picture_url = data.get("picture_url");
            if (picture_url != null && !"".equals(picture_url)) {
                URL url = new URL(picture_url);
                Bitmap bigPicture = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                notificationBuilder.setStyle(
                        new NotificationCompat.BigPictureStyle().bigPicture(bigPicture).setSummaryText(notification.getBody())
                );
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        notificationBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
        notificationBuilder.setLights(Color.YELLOW, 1000, 300);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());
    }
33
Pong Petrung

Ich konnte keine neue Instanz von new NotificationCompat.BigTextStyle () in der .setStyle () - Benachrichtigungsmethode festlegen. Also habe ich die folgende neue Instanz von new Notification.BigTextStyle () in .setStyle () verwendet.

      Notification builder =new Notification.Builder(this)
                    .setSmallIcon(Notification_icons[icon])
                    .setContentTitle(title)
                    .setContentText(description)
                    .setChannelId(channelID_Default)
                    .setOngoing(true)
                    .setStyle(new Notification.BigTextStyle()
                            .bigText(description))
                    .build();
1
anand krish

In Android 4.1-Versionen können wir keine erweiterbaren Benachrichtigungen erstellen .. Aber stattdessen können wir die Benachrichtigungen stapeln und dann eine ausstehende Absicht für unsere ziemlich benutzerdefinierte Aktivität festlegen, die alle Benachrichtigungen in der Liste anzeigt Benutzer werden das gerne sehen :)

0
g4gaj

Es gibt eine Methode für diese Funktion, mit der Sie ein kleines Symbol anzeigen können, wenn eine Benachrichtigung ausgeblendet wird, und ein großes, wenn eine Benachrichtigung ausgeblendet wird.

val bitmap = BitmapFactory.decodeResource(resources, R.drawable.notification)

var notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.new_post)
    .setContentTitle(imageTitle)
    .setContentText(imageDescription)
    .setLargeIcon(bitmap)
    .setStyle(NotificationCompat.BigPictureStyle()
            .bigPicture(bitmap)
            .bigLargeIcon(null))
    .build()
0
Nimisha V