Android настроил AlarmManager на уведомление за 1 день до реального дня от календаря не работает - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу установить уведомление о тревоге за 1 день до реального дня из календаря.

Это мой код.

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 (день) -1 вот так.

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

Но когда я запускаю код во время 23.20, он ничего не показывает.Нет уведомления от Android.

1 Ответ

0 голосов
/ 19 сентября 2018

В ваших комментариях вы написали, что значение для DAY_OF_YEAR равно (1-31).Затем вы устанавливаете DAY_OF_YEAR, используя это значение минус 1 (т. Е. 0-30).

Если вы прочитаете документацию для Calendar.DAY_OF_YEAR, вы заметите, что это номер дня в ГОДЕ (не в течение МЕСЯЦА), ипервый день года - 1 (не 0).Таким образом, DAY_OF_YEAR имеет значение (1-366).

Кроме того, вы всегда должны устанавливать значения Календаря от наибольшего к наименьшему.Поэтому вы должны установить YEAR, затем MONTH, а затем DAY_OF_MONTH (который имеет значения 1-31).


ПРИМЕЧАНИЕ. При возникновении проблем с календарем полезно вывести дату, которая, по вашему мнению, находится вКалендарь, чтобы убедиться, что это действительно дата, которую вы хотели установить.Вы можете сделать это, используя что-то вроде этого: String formattedDate = new SimpleDateFormat ("гггг-ММ-дд'Т'ХХ: мм: сс.SSSXXX"). Формат (calendar.getTime ());Log.v ("tag", "Date is" + formattedDate);

...