будильник срабатывает каждый час и каждый день - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу активировать будильник ежечасно, например, с 6:00 до 18:00, а также каждый день с 6:00 до 18:00. я требую нескольких сигналов тревоги? нужна помощь

Intent intent1 = new Intent(context, cls);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP,setcalendar.getTimeInMillis(), AlarmManager.INTERVAL_HOUR, pendingIntent);
  //  
    Toast.makeText(context, "Notification Alarm set", Toast.LENGTH_SHORT).show();

Вышеуказанный сигнал тревоги срабатывает только на почасовой основе только на один день, но я хочу, чтобы он срабатывал на почасовой основе каждый день

1 Ответ

0 голосов
/ 16 ноября 2018

Если это будет всегда , повторяемое между 6:00 и 18:00 ежедневно, тогда вам не нужна база данных.Также убедитесь, что вы запланировали тревогу на IntentService или BroadcastReceiver в вашем PendingIntentonReceive получите текущий час, проверьте, что он между 6 утра и 6 вечера, если есть, пожарная сигнализация.Если нет, отмените текущий аварийный сигнал (экономия батареи), запланируйте следующий аварийный сигнал на 6 утра.А пока напишите алгоритм, который проверяет текущий день.Подробности я оставил в TODO в примере кода.

    Calendar calendar = Calendar.getInstance();
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    if (hour >= 6 && hour <= 18){
        //fire alarm
    } else if (hour > 19 || hour < 6) {
        Intent intent1 = new Intent(context, cls);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_CANCEL_CURRENT);
        pendingIntent.cancel();
        calendar.set(Calendar.HOUR_OF_DAY, 6);
        //TODO: Write an algorithm that checks if current day + 1 will be still in the same month,
        //TODO: what I mean if it is out of range of month, e.g 30th of Febraury, then get current month and add 1
        //TODO: If there is currently 31st December, change day to be equal of 1, get current year, add 1 etc.
        int currentday = calendar.get(Calendar.DAY_OF_MONTH);
        calendar.set(Calendar.DAY_OF_MONTH, currentday + 1);
        Intent intent1 = new Intent(context, cls);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        am.setInexactRepeating(AlarmManager.RTC_WAKEUP,setcalendar.getTimeInMillis(), AlarmManager.INTERVAL_HOUR, pendingIntent);
    }
...