在特定时间设置安卓闹钟

9

我设置了一个特定的时间闹钟,但每次打开应用程序时它都会自动启动。这是我使用的代码:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0010000,intent,0);

Calendar time = Calendar.getInstance();
time.set(Calendar.HOUR, 5);
time.set(Calendar.MINUTE, 59);
time.set(Calendar.SECOND, 0);

alarmManager.set(AlarmManager.RTC,time.getTimeInMillis(),pendingIntent);

闹钟已设置为5:59:00,但当我离开应用程序并再次打开时,闹钟会重新设置。如何避免这个问题并使闹钟仅在5:59:00设定! - israa
2个回答

23

好的,你需要设置闹钟在下一次为5:59:00时响起。 具体操作是获取当前时间,如果当前时间早于5:59:00,则设置闹钟;如果当前时间晚于5:59:00,则加一天并设置闹钟。如下所示:

import java.util.Calendar;
import java.util.Date;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(new Panel(this));

    Date dat  = new Date();//initializes to now
    Calendar cal_alarm = Calendar.getInstance();
    Calendar cal_now = Calendar.getInstance();
    cal_now.setTime(dat);
    cal_alarm.setTime(dat);
    cal_alarm.set(Calendar.HOUR_OF_DAY,5);//set the alarm time
    cal_alarm.set(Calendar.MINUTE, 59);
    cal_alarm.set(Calendar.SECOND,0);
    if(cal_alarm.before(cal_now)){//if its in the past increment
        cal_alarm.add(Calendar.DATE,1);
    }
    //SET YOUR AlarmManager here

}

我本想为您提供一个可构建的示例,但我对alarmmanager的理解不够深入,所以只能提供这个。该示例在Eclipse 3.5.2上使用ADK 15构建。


获取当前时间,然后找出需要多少毫秒才能到达第二天的5:59:00。我会尽快编写代码。 - Chris
@israa 日期应该初始化为当前时间。cd.add(Calendar.DATE,1); 将会在当前日期上加一天。因此,结果是第二天的5号。为了使其更健壮,您需要检查当前时间,只有在它晚于5:59时才添加一天。 - Chris
1
@israa 如果我猜的话,我会说你正在使用 java.sql.Date 而不是 java.util.Date。 - Chris
哦,是的,你猜对了,我改了它但问题仍然存在! - israa
尝试像这样设置 cal.set(Calendar.SATURDAY,1); 希望 1/0 可以表示真/假的一种方式? - Zen
显示剩余6条评论

0

不要将这段代码放在onCreate函数中,而是将其放在任何按钮事件或其他只有用户交互才会调用的事件中。

我认为,这样就可以了。

PendingIntent pendingIntent =  PendingIntent.getBroadcast(this,0010000,intent,0);
pendingIntent.cancel();

在你的代码中添加这个“cancel”方法。这将在设置新闹钟之前取消先前的闹钟。

从Web服务器数据库中获取时间为5:59:00,我想在后台通知用户而不需要按钮事件,但我不知道如何实现。 - israa
我同意将其放在按钮监听器中,但我怀疑那不是问题所在。 - Chris
这次将从Web服务器获取一次固定时间,即每天的5:59:00。更明确地说,我的应用程序用于患者,医生有一个网站,我希望医生在患者应该服药时提醒患者。我不想使用动作监听器或按钮,我只需要在这个特定时间设置闹钟。 - israa
即使在这种情况下,您也将拥有一种检查数据库的方法。如果医生在网站上设置了5:59,则您将使用某些代码将其带到应用程序中。您每次启动应用程序时都从数据库中读取吗? - BobbyGoks
将一段代码添加到答案中。同时,按照Chris的建议使用DATE + 1。 - BobbyGoks
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接