Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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
Android 报警管理器在实时时间结束后立即启动_Android_Alarmmanager_Android Pendingintent - Fatal编程技术网

Android 报警管理器在实时时间结束后立即启动

Android 报警管理器在实时时间结束后立即启动,android,alarmmanager,android-pendingintent,Android,Alarmmanager,Android Pendingintent,我想设置并取消特定时间的闹钟。我使用下面的代码使用计时器选择器执行相同的操作 public void setRecurringAlarm(int randomTimer,long mills, int i){ Intent intent = new Intent(CreateAlarmActivity.this, AlarmReceiver.class); intent.setData(Uri.parse("timer:" + i)); Pendi

我想设置并取消特定时间的闹钟。我使用下面的代码使用计时器选择器执行相同的操作

public void setRecurringAlarm(int randomTimer,long mills, int i){
        Intent intent = new Intent(CreateAlarmActivity.this, AlarmReceiver.class);
        intent.setData(Uri.parse("timer:" + i));
        PendingIntent pendingIntent = PendingIntent.getBroadcast(CreateAlarmActivity.this, 1253, intent, PendingIntent.FLAG_CANCEL_CURRENT|  Intent.FILL_IN_DATA);
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP,mills,
                pendingIntent);
        Toast.makeText(CreateAlarmActivity.this, "Alarm "+i+" isSet", Toast.LENGTH_LONG).show();
    }
注意:-假设我将闹钟设置为晚上10:00。它在晚上10点可以正常工作。但是,当我再次运行相同的代码时(晚上10点之后),即一旦设置了报警,我调用该代码(重置报警),它立即开始运行。为什么会这样?我无法到达我错的地方

public void scheduleAlarm() {
    // time at which alarm will be scheduled here alarm is scheduled at 1
    // day from current time,
    // we fetch the current time in milliseconds and added 1 day time
    // i.e. 24*60*60*1000= 86,400,000 milliseconds in a day
    // Long time = new GregorianCalendar().getTimeInMillis()+24*60*60*1000;

    Calendar cal = Calendar.getInstance();

    cal.add(Calendar.HOUR_OF_DAY, 20);
    cal.add(Calendar.MINUTE, 00);
    cal.add(Calendar.SECOND, 00);

    Intent intent = new Intent(CreateAlarmActivity.this, AlarmReceiver.class);

    // create the object
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    // set the alarm for particular time
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
            PendingIntent.getBroadcast(this, 1, intentAlarm,
                    PendingIntent.FLAG_UPDATE_CURRENT));
    Toast.makeText(this, "Alarm Scheduled ", Toast.LENGTH_LONG)
            .show();



}
希望这对你有帮助

希望这对你有帮助

希望这对你有帮助

希望这能帮助你做两件事:

  • 如果您通过调用
    setRecurringAlarm(randomTimer,mills,i)
    mills
    参数使用相同的值来“调用该代码”,则报警的时间将在过去,并将立即触发(如果您计划的报警的触发时间在过去,则报警将立即触发)

  • 请删除
    | Intent。从调用
    pendingent.getBroadcast()
    中填写数据。它不属于那里,因为此参数应该只包含
    pendingent
    标志,并且可能会造成一些损害

  • 2件事:

  • 如果您通过调用
    setRecurringAlarm(randomTimer,mills,i)
    mills
    参数使用相同的值来“调用该代码”,则报警的时间将在过去,并将立即触发(如果您计划的报警的触发时间在过去,则报警将立即触发)

  • 请删除
    | Intent。从调用
    pendingent.getBroadcast()
    中填写数据。它不属于那里,因为此参数应该只包含
    pendingent
    标志,并且可能会造成一些损害

  • 2件事:

  • 如果您通过调用
    setRecurringAlarm(randomTimer,mills,i)
    mills
    参数使用相同的值来“调用该代码”,则报警的时间将在过去,并将立即触发(如果您计划的报警的触发时间在过去,则报警将立即触发)

  • 请删除
    | Intent。从调用
    pendingent.getBroadcast()
    中填写数据。它不属于那里,因为此参数应该只包含
    pendingent
    标志,并且可能会造成一些损害

  • 2件事:

  • 如果您通过调用
    setRecurringAlarm(randomTimer,mills,i)
    mills
    参数使用相同的值来“调用该代码”,则报警的时间将在过去,并将立即触发(如果您计划的报警的触发时间在过去,则报警将立即触发)

  • 请删除
    | Intent。从调用
    pendingent.getBroadcast()
    中填写数据。它不属于那里,因为此参数应该只包含
    pendingent
    标志,并且可能会造成一些损害


  • 您可以检查报警时间是否早于当前时间。如果是,则设置第二天的警报时间(如果您希望至少触发一次警报,或希望设置重复警报)


    您可以检查报警时间是否早于当前时间。如果是,则设置第二天的警报时间(如果您希望至少触发一次警报,或希望设置重复警报)


    您可以检查报警时间是否早于当前时间。如果是,则设置第二天的警报时间(如果您希望至少触发一次警报,或希望设置重复警报)


    您可以检查报警时间是否早于当前时间。如果是,则设置第二天的警报时间(如果您希望至少触发一次警报,或希望设置重复警报)

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, hour);
    cal.set(Calendar.MINUTE, minute);
    cal.set(Calendar.SECOND, 0);
    if (System.currentTimeMillis() > cal.getTimeInMillis()) {
        calendar.add(Calendar.DATE, 1);
    }
    
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);