我正在使用闹钟管理器和广播接收器设置通知。我曾尝试使用警报管理器的setInexactRepeating方法,但它不会在API 19以上的确切时间发出警报。
所以我建议使用setExact方法并手动设置警报。我不知道怎么能这样做。我是否需要计算一年中每周的日期?
我如何设置每周同一天的时间?喜欢如果我已经为本周一的星期一设定了时间,我希望下周所有星期一都能收到警报。
我如何设定每周的时间?
以下是我设置闹钟的方法:
public void setNotificationTime(Calendar c)
{
Date dateFrom = new Date();
df = new SimpleDateFormat("E MMM dd hh:mm:ss zzzz yyyy");
try {
dateFrom = df.parse(startTime);
}
catch (ParseException ex) {
}
dateFrom.getTime();
c.setTime(dateFrom);
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
if(notificationTime.equals("10 Minutes Before"))
{
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute - 10);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
c.set(Calendar.DATE, day);
// c.set(Calendar.DAY_OF_WEEK,);
SetDay(c);
notification = c.getTime();
notificationTime = df.format(notification);
Toast.makeText(getApplicationContext(),notificationTime,Toast.LENGTH_SHORT).show();
intent = new Intent(getBaseContext(),NotificationReceiver.class);
pendingIntent = PendingIntent.getBroadcast(getBaseContext(),RQS_1, intent, 0);
alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent);
}
else if(notificationTime.equals("30 Minutes Before"))
{
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute - 30);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
c.set(Calendar.DATE, day);
// c.set(Calendar.DAY_OF_WEEK,);
SetDay(c);
notification = c.getTime();
notificationTime = df.format(notification);
Toast.makeText(getApplicationContext(),notificationTime,Toast.LENGTH_SHORT).show();
intent = new Intent(getBaseContext(),NotificationReceiver.class);
pendingIntent = PendingIntent.getBroadcast(getBaseContext(),RQS_1, intent, 0);
alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent);
}
}
我的尝试是使用for循环来获取下周的日期并设置闹钟。因此,循环将运行52次,即一年52周。
它将设置一年中每周的日期。但我只有下一个星期的日期,即如果今天是11岁,我的日期是18日。它不会进一步发展。这有什么不对?
public void setDates(Calendar c)
{
Date dateFrom = new Date();
df = new SimpleDateFormat("E MMM dd hh:mm:ss zzzz yyyy");
try {
dateFrom = df.parse(startTime);
}
catch (ParseException ex) {
}
c.setTime(dateFrom);
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
dateFrom.getTime();
Date setDate = new Date();
SetDay(c);
Date changeDate = new Date();
for(int i=0;i<=52;i++) {
setDate.setTime(changeDate.getTime());
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute - 10);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
c.set(Calendar.DATE, day + 7);
// c.set(Calendar.DAY_OF_WEEK,);
// c.setTime(setDate);
notification = c.getTime();
notificationTime = df.format(notification);
changeDate.setTime(notification.getTime());
Log.i("changedate",String.valueOf(changeDate));
Log.i("dates",notificationTime);
}
}
谢谢..
答案 0 :(得分:1)
请选择不精确的重复来帮助用户节省电量。这就是Android不希望您设置精确重复警报的原因 - 它可能会非常快地耗尽电池。
如果您必须完全重复,则必须设置准确的警报,然后在触发时,在下次需要时注册另一个新的确切警报。只要你需要,重复这个。