Android将AlarmManager设置为在日历前一天的1天从calenda通知

时间:2018-09-19 16:51:55

标签: android alarmmanager android-alarms

我想在日历前一天的第一天设置警报通知。

这是我的代码。

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                        ContentValues cv = new ContentValues();
                        cv.put(DBHelper.COL_VEHICLE_TYPE, vt);
                        cv.put(DBHelper.COL_DATE, mDisplayDate.getText().toString());

                        db.update(DBHelper.TABLE_NAME, cv, "_id = ?",new String[]{rowId});
                        cursor.requery();

                        String[] parts = mDisplayDate.getText().toString().split("-");
                        String day = parts[0];
                        String month = parts[1];
                        String year = parts[2];
                        Calendar cal = Calendar.getInstance();
                        cal.set(Calendar.DAY_OF_YEAR, Integer.parseInt(day)-1);  //1-31
                        cal.set(Calendar.MONTH, Integer.parseInt(month));  //first month is 0!!! January is zero!!!
                        cal.set(Calendar.YEAR, Integer.parseInt(year));//year...

                        cal.set(Calendar.HOUR_OF_DAY,23);  //HOUR
                        cal.set(Calendar.MINUTE, 20);       //MIN
                        cal.set(Calendar.SECOND, 0);       //SEC

                        manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
                        myIntent = new Intent(DriverLicenseActivity.this, AlarmNotificationReceiver.class);
                        pendingIntent = PendingIntent.getService(DriverLicenseActivity.this, 0,myIntent , 0);
                        manager.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pendingIntent);


                        getData();


                    }
                })

我像这样使用Integer.parseInt(day)-1来设置真实日历前的日历。

cal.set(Calendar.DAY_OF_YEAR, Integer.parseInt(day)-1);

但是当我运行代码到时间23.20时,它什么也没显示。没有来自Android的通知。

1 个答案:

答案 0 :(得分:0)

在您的评论中,您写道DAY_OF_YEAR的值为(1-31)。然后,您使用该值减去1(即0-30)来设置DAY_OF_YEAR。

如果您阅读Calendar.DAY_OF_YEAR的文档,则会注意到它是YEAR年(而不是MONTH年)中的天数,而一年的第一天是1天(不是0年)。因此DAY_OF_YEAR的值为(1-366)。

此外,您应始终将日历值设置为从最大到最小。因此,您应该设置YEAR,然后设置MONTH,然后设置DAY_OF_MONTH(其值是1-31)。


注意:当日历出现问题时,输出您认为在日历中的日期很有用,以确保它确实是您想要设置的日期。您可以使用以下方法做到这一点:     字符串formattedDate = new SimpleDateFormat(“ yyyy-MM-dd'T'HH:mm:ss.SSSXXX”)。format(calendar.getTime());     Log.v(“ tag”,“ Date is” + formattedDate);