在Android中设置每天特定时间的重复报警

在Android中设置每天特定时间的重复报警,android,calendar,alarmmanager,Android,Calendar,Alarmmanager,我使用报警管理器在每天的特定时间运行报警。下面是代码 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 00); calendar.set(Calendar.MINUTE, 00); AlarmManager alarmManager = (A

我使用报警管理器在每天的特定时间运行报警。下面是代码

 Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 00);
    calendar.set(Calendar.MINUTE, 00);

      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        Intent intent = new Intent(this, OnAlarmReceive.class);
        PendingIntent pendingIntent =PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                24*60*60*1000, pendingIntent);
我每天12点设置闹钟。下面是广播接收器的代码

@Override
   public void onReceive(Context context, Intent intent)
   {
           System.out.println("Time is 12 Am");
           Toast.makeText(context, "Alarm Triggered", Toast.LENGTH_LONG).show();     
    }
此代码中的问题是,无论何时运行应用程序,都会立即触发警报。任何帮助都将不胜感激。谢谢

试着用这个:

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
        AlarmManager.INTERVAL_DAY, intent);

我和你有同样的问题,我无法让它工作。另外,我能找到的所有例子都是设定一个特定的日期,而不仅仅是时间。这应该适合您:

Intent myIntent = new Intent(ThisActivity.this , NotifyService.class);     
AlarmManager alarmManager = (AlarmManager) Context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(ThisActivity.this, 0, myIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent); //Repeat every 24 hours

希望这能帮助你解决你的问题

如果您在过去设置了警报,警报将立即触发。 例如,现在是10:00,您希望在每天09:00设置闹钟。为了避免这种情况,你必须看看现在几点了,如果是这样的话,把闹钟调一天。。。这允许您使用
setRepeating
方法(比
setInexactRepeating
更精确)

这解决了问题:

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 00);
calendar.set(Calendar.MINUTE, 00);

if(Calendar.getInstance().after(calendar)){
    // Move to tomorrow
    calendar.add(Calendar.DATE, 1);
}

//... continue like before by setting the alarm

您可以使用以下内容:

Calendar cal = Calendar.getInstance();
    if(cal.getTimeInMillis() < System.currentTimeMillis()) {
        cal.add(Calendar.DAY_OF_YEAR, 7);
    }
Calendar cal=Calendar.getInstance();
if(cal.GetTimeMillis()
同一个混蛋。我希望闹钟是在上午或下午。如果我将闹钟设置为当前小时的下一分钟,不管一天的时间(上午或下午),它仍然会响。你可以通过链接。这可能会对你有所帮助