计划的通知在重新启动android之后仍然有效

时间:2019-01-01 22:50:48

标签: android push-notification

我正在制作类似应用程序的提醒,用户可以在其中注册和创建任务,并为每个任务设置提醒。任务存储在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);
}
}

0 个答案:

没有答案