I am doing to the following:
use getNotification()
and your calandar.getTime()
as parameters for scheduleNotification
private void scheduleNotification(Notification notification, Date alarmTime) {
Intent notificationIntent = new Intent(this, NotificationReceiver.class);
notificationIntent.putExtra(NotificationReceiver.NOTIFICATION_ID, 1);
notificationIntent.putExtra(NotificationReceiver.NOTIFICATION, notification);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime.getTime(), pendingIntent);
}
private Notification getNotification() {
int colour = getNotificationColour();
Bitmap largeNotificationImage = getLargeNotificationImage();
return new RandomNotification(this).getNotification(
"Text",
"More text",
getNotificationImage(),
largeNotificationImage,
colour);
}
private int getNotificationColour() {
return ContextCompat.getColor(this, R.color.colorAccent);
}
private Bitmap getLargeNotificationImage() {
return BitmapFactory.decodeResource(this.getResources(),
R.mipmap.ic_launcher);
}
My RandomNotification Class:
public class RandomNotification {
private Context context;
public RandomNotification(Context context) {
this.context = context;
}
public Notification getNotification(String title, String message, int imageResourceId, Bitmap largeResource, int colour) {
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Notification.Builder builder = new Notification.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setSmallIcon(imageResourceId)
.setLargeIcon(largeResource)
.setTicker("Ticker")
.addAction(0, "Button", getButtonIntent())
.setSound(soundUri)
.setLights(Color.BLUE, 300, 100)
.setAutoCancel(true)
.setPriority(Notification.PRIORITY_MAX)
.setContentIntent(getPendingNotificationIntent());
handleNotificationColor(builder, colour);
Notification notification = builder.build();
notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
return notification;
}
private Notification.Builder handleNotificationColor(Notification.Builder builder, int colour) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder.setColor(colour);
}
return builder;
}
private PendingIntent getPendingNotificationIntent() {
Intent notificationIntent = new Intent(context, HomeActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingNotificationIntent = PendingIntent.getActivity(context, 1,
notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
return pendingNotificationIntent;
}
private PendingIntent getButtonIntent() {
Intent notificationButtonReceiver = new Intent(context, NotificationButtonReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, notificationButtonReceiver, PendingIntent.FLAG_CANCEL_CURRENT);
return pendingIntent;
}
}
My notification button receiver class:
public class NotificationButtonReceiver extends BroadcastReceiver {
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
// do something
}
}
My updated notification receiver class
public class NotificationReceiver extends BroadcastReceiver {
public static String NOTIFICATION_ID = "notification-id";
public static String NOTIFICATION = "notification";
@Override
public void onReceive(Context context, Intent intent) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = intent.getParcelableExtra(NOTIFICATION);
int id = intent.getIntExtra(NOTIFICATION_ID, 0);
notificationManager.notify(id, notification);
}
}
My manifest file:
<receiver
android:name=".NotificationButtonReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.NOTIFY" />
</intent-filter>
</receiver>
<receiver
android:name=".NotificationReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.NOTIFY" />
</intent-filter>
</receiver>