AlarmManager在应用程序打开时,在指定的工作日时间重复设置每周报警



我想在一周中某一天的预定时间(周六上午8:30(在android中重复通知。我已经设置了代码和警报工作(与通知(。警报不需要唤醒设备,并在下次唤醒时触发通知。

问题:每次新打开应用程序时都会触发一次警报。

尝试了不同的组合,但无法发挥作用。非常感谢你的帮助。非常感谢。

MainActivity.java(OnCreate(

AndroidHelper ahelper= new AndroidHelper();
public static long rand_news_notify_freq= AlarmManager.INTERVAL_DAY * 7;
Calendar ca = Calendar.getInstance();
ca.set(Calendar.HOUR_OF_DAY,8);
ca.set(Calendar.MINUTE,30);
ca.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
ca.set(Calendar.SECOND, 0);
ca.set(Calendar.MILLISECOND, 0);
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
ahelper.setAlarms(alarmMgr, getApplicationContext(), RandomNewsNotification.class, ca, rand_news_notify_freq);

AndroidHelper.class

public class AndroidHelper{
public AndroidHelper()
{
}
public void setAlarms(AlarmManager alarmMgr, Context tctx, Class alarmClass, Calendar calendar, long freq)
{
Intent alarmIntent = new Intent(tctx, alarmClass);
PendingIntent pendingIntent = PendingIntent.getBroadcast(tctx, 0, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//alarmMgr.setRepeating(alarmMgr.RTC, calendar.getTimeInMillis(), freq, pendingIntent); // This is not working
alarmMgr.setInexactRepeating(alarmMgr.RTC, calendar.getTimeInMillis(), freq, pendingIntent); // This is not working too (same problem)
}
}

需要改变什么?

我不知道你想设置精确重复还是不精确重复。对于精确的重复,您自己应该使用精确的方法来处理重复,并且不要使用alaramManager的重复方法,如setInexactRepeating。还要考虑,如果设备处于Doze模式,警报将不会响起。因此,您应该使用setExactAndAllowWhileIdle方法来保证警报将执行。

您可以在Android开发者文档中看到更多详细信息:https://developer.android.com/training/scheduling/alarms

最新更新