我正在构建一个提醒应用程序,用户在其中将事件输入 SQLite DB。主屏幕列出了每个提醒的标题,单击一个项目会显示它的详细信息。所有这一切都很好。
现在我想允许用户为每个项目设置通知,可以选择在活动安排前 15 分钟、30 分钟或 1 小时设置提醒。
我不知道如何去做,也找不到任何好的教程。谁能给我一些关于如何实现它的想法?
谢谢!
我正在构建一个提醒应用程序,用户在其中将事件输入 SQLite DB。主屏幕列出了每个提醒的标题,单击一个项目会显示它的详细信息。所有这一切都很好。
现在我想允许用户为每个项目设置通知,可以选择在活动安排前 15 分钟、30 分钟或 1 小时设置提醒。
我不知道如何去做,也找不到任何好的教程。谁能给我一些关于如何实现它的想法?
谢谢!
使用AlaramManager触发广播,告诉您的应用程序向用户显示有关事件的通知。
下面是一个使用它的例子:Alarm Manager Example
从数据库中获取事件的日期后,它就像任何其他通知一样简单,只需记住您要减去日期的时间量(15、30、60 分钟)。
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
按照其他人的建议使用。
您将使用 AlarmManager 设置要在特定日期/时间触发的操作。(有很多关于如何使用 AlarmManager 的教程)
警报管理器事件总是触发 PendingIntent。根据这个意图,您可以进行广播或启动服务。(您必须创建广播接收器或服务)
然后在广播接收器或服务上建立并显示通知。
我建议使用广播接收器路由,它更干净,更无缝。您可能还需要一个用于 onBoot 事件的广播接收器,以便在用户重新启动设备的情况下重新安排警报管理器上的事件。