Java 使用计时器android调度通知

Java 使用计时器android调度通知,java,android,Java,Android,我在用计时器来安排通知 GregorianCalendar date = new GregorianCalendar(2011, 2, 6, 16, 50); long task = date.getTimeInMillis() - System.currentTimeMillis(); Timer timer = new Timer(); TimerTask timerTask = new TimerTask() { @Ov

我在用计时器来安排通知

        GregorianCalendar date = new GregorianCalendar(2011, 2, 6, 16, 50);
    long task = date.getTimeInMillis() - System.currentTimeMillis();



    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask()
    {
        @Override
        public void run()
        {
            triggerNotification();
        }
    };
    timer.schedule(timerTask, task);

如果我在schedule方法中手动输入一个长值,计时器将工作,但如果我使用task变量,计时器似乎不会工作。基本上,我希望在公历对象中指定的日期和时间安排通知。我做错了什么?

通过使用此功能而不是日历来实现此功能:

    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm");
    Date date = formatter.parse("02/06/2011 16:28");
timer.schedule(timerTask, date);

如果您正在安排的任务已离开一段时间,AlarmManager类可能也值得一看:

您可以执行以下操作:

private void createStatusBarNotification(final String contentTitle, final String contentText, final String tickerText, final long millisec)
{ 
    //Date date = new Date(System.currentTimeMillis() + (1000 * 60 * 2));//in next 2 minutes
    long f = System.currentTimeMillis() + (1000 * 60 * 2);
    //super.webView.loadUrl("javascript: alert('::"+millisec+","+f+"')");
    Date date = new Date(millisec);
    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask()
    {
        @Override
        public void run()
        {
            createNotification( contentTitle,  contentText,  tickerText,  millisec);
        }
    };
    timer.schedule(timerTask, date);            
}

比较这两种方法,我现在看到了第一种方法的错误:在GregorianCalendar中,月份为零,这意味着第一种代码触发了3月6日的通知,而不是2月6日的通知。