I'm being implementing Android rich notifications using the compatibility library, so all my notifications are being built using android.support.v4.app.NotificationCompat.Builder
the code I'm using is the following:
// Base notification
NotificationCompat.Builder b = new NotificationCompat.Builder(context);
b.setSmallIcon(R.drawable.ic_actionbar);
b.setContentTitle(title);
b.setContentText(Html.fromHtml(msg));
b.setTicker(title);
b.setWhen(System.currentTimeMillis());
b.setDeleteIntent(getDismissNotificationsPendingIntent(quantity));
b.setLargeIcon(Picasso.with(context).load(iconUrl).get());
// BigPictureStyle
NotificationCompat.BigPictureStyle s = new NotificationCompat.BigPictureStyle();
if (expandedIconUrl != null) {
s.bigLargeIcon(Picasso.with(context).load(expandedIconUrl).get());
} else if (expandedIconResId > 0) {
s.bigLargeIcon(BitmapFactory.decodeResource(context.getResources(), expandedIconResId));
}
s.bigPicture(Picasso.with(context).load(bigImageUrl).get());
b.setStyle(s);
b.setContentIntent( // some intent
b.addAction(R.drawable.ic_notification_ // some action
Notification n = b.build();
// and go ahead to show it
There's a bit of extra basically not loading any images if showing images is not compatible, so we don't use memory for no reason, but that's the base and I'm expecting something similar to the notification to the right of the following image
the problem is that the message (on the example "Touch to view your screenshot.") shows when the notification is contracted, but when the notification is expanded the message disappears.
Is there any setMessage()
method I am forgetting to call? Is that a bug with NotificationCompat
? Can anyone give some insight here?
Is there any setMessage() method I am forgetting to call?
Yep! NotificationCompat.BigPictureStyle setSummaryText
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, setBigPictureStyleNotification());
private Notification setBigPictureStyleNotification() {
Bitmap remote_picture = null;
// Create the style object with BigPictureStyle subclass.
NotificationCompat.BigPictureStyle notiStyle = new NotificationCompat.BigPictureStyle();
notiStyle.setBigContentTitle("Big Picture Expanded");
notiStyle.setSummaryText("Nice big picture.");
try {
remote_picture = BitmapFactory.decodeStream((InputStream) new URL(sample_url).getContent());
} catch (IOException e) {
e.printStackTrace();
}
// Add the big picture to the style.
notiStyle.bigPicture(remote_picture);
// Creates an explicit intent for an ResultActivity to receive.
Intent resultIntent = new Intent(this, ResultActivity.class);
// This ensures that the back button follows the recommended convention for the back key.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself).
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);
return new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setAutoCancel(true)
.setLargeIcon(remote_picture)
.setContentIntent(resultPendingIntent)
.addAction(R.drawable.ic_launcher, "One", resultPendingIntent)
.addAction(R.drawable.ic_launcher, "Two", resultPendingIntent)
.addAction(R.drawable.ic_launcher, "Three", resultPendingIntent)
.setContentTitle("Big Picture Normal")
.setContentText("This is an example of a Big Picture Style.")
.setStyle(notiStyle).build();
}