从SQLite DB设置android通知

时间:2012-11-08 14:36:43

标签: android android-notifications

我正在构建一个提醒应用程序,用户将事件输入到SQLite数据库中。主屏幕列出每个提醒的标题,单击一个项目显示其详细信息。所有这一切都很好。

现在我想允许用户为每个项目设置通知,在预定活动开始之前,我们可以选择设置15分钟,30分钟或1小时的提醒。

我不知道如何解决这个问题,也找不到任何好的教程。任何人都可以告诉我如何实现这个目标吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

使用AlaramManager发送广播,告知您的应用向用户显示有关该事件的通知。

以下是使用它的示例:Alarm Manager Example

答案 1 :(得分:2)

从数据库中获取事件的日期后,就像其他任何通知一样简单,请记住,您要减去到该日期的时间(15,30,60分钟)。 / p>

Timer timer = new Timer();
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm");
Date date = formatter.parse("11/08/2012 16:39");
timer.schedule(timerTask, date);

这会将活动安排到活动时间,我知道您需要在活动实际发生之前提醒。为此,您可以创建一个日历对象,以您需要的方式修改日期。请记住删除之前的时间表,否则您将收到两个提醒(当时一个,一个提醒)。

Calendar cal = Calendar.getInstance();
         cal.setTime(date);
         cal.add(Calendar.MINUTE, -15);//Or whatever
//Then schedule it.
time.schedule(timerTask,cal.getTime());

这两种方法都使用变量timerTask,这可能是这样的,涉及createNotification方法调用,实际上会创建待处理通知。

TimerTask timerTask = new TimerTask(){
   @Override
   public void run(){
       createNotification(title,  text,  tickerText,  millisec);
   }
};

您有潜在的问题。如果应用程序关闭,我相信计时器会随之消失,因此根据应用程序的性质,您可能希望像其他人所建议的那样使用AlarmManager

答案 2 :(得分:1)

您将使用AlarmManager设置在特定日期/时间触发的操作。 (有很多关于如何使用AlarmManager的教程)

警报管理器事件始终触发PendingIntent。通过此意图,您可以进行广播或启动服务。 (您必须创建广播接收器或服务)

然后在您建立的广播接收器或服务上显示通知。

我建议使用广播接收器路线,它更干净,更无缝。 您可能还有onBoot事件的广播接收器,以重新安排用户重新启动设备的警报管理器上的事件。