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
Eine erweiterbare Notification
ist ein Sonderfall einer Notification
Big 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 View
Notification
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.
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:
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());
}
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();
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 :)
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()