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,alarmIntent,PendingIntent.FLAG_CANCEL_CURRENT);
        //alarmMgr.setRepeating(alarmMgr.RTC,calendar.getTimeInMillis(),freq,pendingIntent); // This is not working
        alarmMgr.setInexactRepeating(alarmMgr.RTC,pendingIntent); // This is not working too (same problem)
    }
}

需要更改什么?

解决方法

我不知道您要设置精确重复还是不精确重复。对于精确的重复,您自己应该使用精确的方法来处理重复,并且不要使用诸如setInexactRepeating之类的alaramManager的重复方法。 还应考虑设备是否处于打ze模式,alaram不会触发。因此您应该使用setExactAndAllowWhileIdle方法来确保警报将执行。

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