我正在制作类似应用程序的提醒,用户可以在其中注册和创建任务,并为每个任务设置提醒。任务存储在Firebase实时数据库中。 我有一个活动“ TaskEditActivity”,可以在其中为任务设置提醒,用户输入日期,我想在该特定时间/日期显示通知。
到目前为止,我已经能够安排通知并通过BroadcastReceiver(AlarmReceiver.java)实际显示。
我希望在重新启动设备后显示计划的通知,但是我不知道如何。 我看到其他使用JobIntentService和BroadcastReceiver的帖子正在监听BOOT_COMPLETED,但我不知道如何使通知显示特定任务信息的信息,例如标题和说明,因为在设备重新启动并无法传递Intent时,用正确的信息重新安排我的通知。 另外,我希望用户能够通过按钮从“ TaskEditActivity”中取消通知,但使用NotificationManager中的cancel(notificationId)方法无法正常工作。
由于该应用程序将进行评分,并且截止日期越来越快,所以我非常感谢代码片段,示例或教程,而我一直在寻找解决方案已有数小时之久。
这是我TaskEditActivity.java的相关部分
private void scheduleNotification() {
Intent intent = new Intent(this, AlarmReceiver.class);
intent.putExtra("notification", getNotification());
intent.putExtra("id", task.getNotificationId());
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager)this.getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (reminderCalendar.getTimeInMillis() - System.currentTimeMillis()), pendingIntent);
}
private Notification getNotification() {
Intent i = new Intent(this, TaskEditActivity.class);
i.putExtra("isNew", false);
i.putExtra("listKey", listKey);
i.putExtra("task", task);
PendingIntent tapIntent = PendingIntent.getActivity(this, 0, i, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, NotificationUtil.getInstance().CHANNEL_ID)
.setSmallIcon(R.drawable.ic_check)
.setContentTitle(task.getTitle())
.setContentText(task.getDescription())
.setContentIntent(tapIntent)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setCategory(NotificationCompat.CATEGORY_REMINDER);
return mBuilder.build();
}
这是我的AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = intent.getParcelableExtra("notification");
notification.defaults |= Notification.DEFAULT_SOUND;
notificationManager.notify(intent.getIntExtra("id", 0), notification);
}
}