安卓设备如何设置特定日期的闹钟

3

我想在特定日期设置带通知的闹钟。 目前,我正在使用AlarmManager和NotificationManager。 当我从dateDialog中选择日期时,闹钟会响起。 如何在闹钟设置时将日历值放入固定时间? 我希望每天在固定时间(例如早上9点)重复闹钟。 目前,闹钟忽略了特定日期的时间。 你能帮帮我吗?非常感谢。

confirmButton.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) {
            //set alarm with expiration date                
            am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            setOneTimeAlarm();
            Toast.makeText(fridgeDetails.this, "Alarm automatic set", Toast.LENGTH_SHORT).show();
            setResult(RESULT_OK);
            finish();
        }
        public void setOneTimeAlarm() {
        c.set(Calendar.HOUR_OF_DAY, 10);
        c.set(Calendar.MINUTE, 0);
        c.set(expiredYear, expiredMonth, expiredDay);
        Intent myIntent = new Intent(fridgeDetails.this, AlarmService.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(fridgeDetails.this, 
                        0, myIntent, PendingIntent.FLAG_ONE_SHOT);
        am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);

        }
    });


private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() 
{
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        expiredYear = year;
        expiredMonth = monthOfYear;
        expiredDay = dayOfMonth;
        displayDate();
    }
};  

public class AlarmService extends BroadcastReceiver{
NotificationManager nm;
@Override
public void onReceive(Context context, Intent intent) {
    nm = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
          CharSequence from = "Check your fridge";
          CharSequence message = "It's time to eat!";
          PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            new Intent(), 0);
          Notification notif = new Notification(R.drawable.ic_launcher,
            "Keep Fridge", System.currentTimeMillis());
          notif.setLatestEventInfo(context, from, message, contentIntent);
          nm.notify(1, notif);
         }  
}
4个回答

10

如果你想在特定的月份的某个日期播放闹钟,比如你想在2012年6月11日播放闹钟,那么你应该像这样指定,但是六月是第6个月,所以在Calendar.Month中应该指定为5。

Calendar cal=Calendar.getInstance();
cal.set(Calendar.MONTH,5);
cal.set(Calendar.YEAR,2012);
cal.set(Calendar.DAY_OF_MONTH,11);

cal.set(Calendar.HOUR_OF_DAY,16);
cal.set(Calendar.MINUTE,10);
cal.set(Calendar.SECOND,0);

Intent _myIntent = new Intent(getApplicationContext(), ReceiverClass.class);
PendingIntent _myPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 123, _myIntent, PendingIntent.FLAG_UPDATE_CURRENT|  Intent.FILL_IN_DATA);
AlarmManager _myAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
//_myAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), _myPendingIntent);
_myAlarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), _myPendingIntent);  

2
欢迎来到 Stack Overflow!这是一个很好的设置闹钟的第一篇答案,你提供了良好的描述和支持代码。但请再检查一下你的代码:你设置了三次日历对象,并且有很多不必要的空格。此外,如果月份的索引令人困惑,只需使用这个:cal.set(Calendar.MONTH,Calendar.JUNE); - Sam

3

嘿,这是如何在Android AlarmManager上设置特定日期的闹钟(android alarmmanager set alarm on date)。 我一直在搜索这个。 注意月份的值!!

Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
//cal.add(Calendar.SECOND, 10);

cal.set(Calendar.DATE,19);  //1-31
cal.set(Calendar.MONTH,Calendar.DECEMBER);  //first month is 0!!! January is zero!!!
cal.set(Calendar.YEAR,2012);//year...

cal.set(Calendar.HOUR_OF_DAY, 16);  //HOUR
cal.set(Calendar.MINUTE, 39);       //MIN
cal.set(Calendar.SECOND, 10);       //SEC


// Create a new PendingIntent and add it to the AlarmManager
Intent intent = new Intent(MainActivity.this, alarmAct.class);
PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0,intent, 0);

//or if you start an Activity
//PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0,intent, 0);

AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

2

您需要调用public void setRepeating (int type, long triggerAtTime, long interval, PendingIntent operation)请参见此处)来重复触发闹钟。例如,您想每天早上9:00触发闹钟,可以这样做:

Calendar c=Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 9);
c.set(Calendar.MINUTE, 0);
setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), AlarmManager.INTERVAL_DAY,pendingIntent);

此外,在初始化PendingIntent时,将最后一个参数设置为0。
PendingIntent pendingIntent = PendingIntent.getBroadcast(fridgeDetails.this, 
                        0, myIntent, 0);

非常感谢您的回复!我想知道setRepeating的具体用法。如果我想在特定日期之后设置重复闹钟,这种方法是否正确?例如,我设置了闹钟日期为2011年01月12日。如果我按照上面的代码设置重复,那么闹钟是在2011年01月12日之后每天重复,而不是在此之前吗?我只是想了解setRepeating,这是真的吗? - wholee1
第二个参数是闹钟应该触发的第一次时间。如果您想在特定日期之后重复闹钟,则可以将日历设置为该日期,并将日历时间设置为第二个参数。第三个参数是两个闹钟之间的间隔时间,因此,在您的情况下,它应始终为AlarmManager.INTERVAL_DAY。 - Huang

0
cal_alarm.setTime(dat);
        cal_alarm.set(Calendar.MONTH,3);
        cal_alarm.set(Calendar.YEAR,2012);
        cal_alarm.set(Calendar.DAY_OF_MONTH,4);
        cal_alarm.set(Calendar.HOUR_OF_DAY,19);//set the alarm time
        cal_alarm.set(Calendar.MINUTE, 15);
        cal_alarm.set(Calendar.SECOND,0);


        if(cal_alarm.before(cal_now)){//if its in the past increment
            cal_alarm.add(Calendar.DATE,1);
        }

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

    alarmManager.set(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), pendingIntent);  
}

这可能会帮助你


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