问题描述
我想在一周中的特定日期(星期六上午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