Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每天每小时触发一次警报_Java_Android_Android Studio_Alarmmanager_Alarm - Fatal编程技术网

Java 每天每小时触发一次警报

Java 每天每小时触发一次警报,java,android,android-studio,alarmmanager,alarm,Java,Android,Android Studio,Alarmmanager,Alarm,我想每小时触发警报,比如从早上6点到下午6点,每天早上6点到下午6点。 我需要多个报警器吗? 需要帮助 Intent intent1 = new Intent(context, cls); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT); AlarmMa

我想每小时触发警报,比如从早上6点到下午6点,每天早上6点到下午6点。 我需要多个报警器吗? 需要帮助

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();

上述警报仅在一天内每小时触发一次,但我希望它在每天每小时触发一次

如果它总是在每天早上6点到下午6点之间重复,那么您不需要数据库。另外,请确保在您的
pendingent
中为
IntentService
BroadcastReceiver
安排报警。在
onReceive
get current hour(获取当前小时)中,检查它是否在早上6点到下午6点之间,如果是,则检查火警。如果没有,取消当前报警(节省电池),将下一次报警安排在早上6点。同时,编写一个检查当前日期的算法。我在示例代码中的TODOs中留下的详细信息

    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);
    }
Calendar Calendar=Calendar.getInstance();
int hour=calendar.get(calendar.hour/OF\u DAY);
如果(小时>=6和&19小时| |小时<6){
意向意向1=新意向(上下文,cls);
PendingEvent PendingEvent=PendingEvent.getBroadcast(上下文、每日提醒、请求代码、意图1、PendingEvent.FLAG、取消、当前);
挂起。取消();
calendar.set(calendar.HOUR\u OF_DAY,6);
//TODO:编写一个算法,检查当前日期+1是否仍在同一个月内,
//TODO:我的意思是,如果它超出了月份范围,例如2月30日,则获取当前月份并添加1
//TODO:如果当前为12月31日,则将日期更改为等于1,获取当前年份,添加1,以此类推。
int currentday=calendar.get(calendar.DAY/u月);
calendar.set(calendar.DAY\u/u月,currentday+1);
意向意向1=新意向(上下文,cls);
PendingEvent PendingEvent=PendingEvent.getBroadcast(上下文、每日提醒、请求代码、意图1、PendingEvent.FLAG、更新、当前);
AlarmManager am=(AlarmManager)context.getSystemService(ALARM\u服务);
am.setInexactRepeating(AlarmManager.RTC_唤醒,setcalendar.getTimeInMillis(),AlarmManager.INTERVAL_HOUR,PendingEvent);
}