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

use*_*369 9 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 = (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);
Run Code Online (Sandbox Code Playgroud)

我每天早上12点设置闹钟.以下是BroadCastReciever的代码

@Override
   public void onReceive(Context context, Intent intent)
   {
           System.out.println("Time is 12 Am");
           Toast.makeText(context, "Alarm Triggered", Toast.LENGTH_LONG).show();     
    }
Run Code Online (Sandbox Code Playgroud)

此代码中的问题是警报被触发一旦我运行应用程序无论时间如何.任何帮助将不胜感激.谢谢

edw*_*ard 5

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

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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助您解决您的问题!


Ent*_*eco 5

如果您过去设置闹钟,闹钟将立即触发.例如现在是10:00h,你想每天09:00设置闹钟.为了避免这种情况,您必须查看它现在的时间,如果是这种情况,则将警报移动1天...这允许您使用该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
Run Code Online (Sandbox Code Playgroud)


Moh*_*bah 2

尝试使用这个:

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
        AlarmManager.INTERVAL_DAY, intent);
Run Code Online (Sandbox Code Playgroud)