我有一个BroadcastReceiver
,可以重新安排启动和时间变化等事件的警报。但是当时间超过警报的触发时间时(例如,当用户手动更改设置的时间时),AlarmManager
会在我添加一天重新安排警报之前立即触发警报。我怎么能避免这个?
我目前正在使用Calendar
的设置和添加方法来安排闹钟。
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek >= nowDay &&
!(dayOfWeek == nowDay && alarm.timeHour < nowHour) &&
!(dayOfWeek == nowDay && alarm.timeHour == nowHour && alarm.timeMinute <= nowMinute)) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
alarmSet = true;
break;
}
}
if (!alarmSet) {
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek <= nowDay) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
break;
}
}
}
文档中也说明了这一点:
如果声明的触发时间是过去的,则会触发警报 立即
如何改变这种行为?
答案 0 :(得分:4)
这是有意的。参见例如Set a Repeating Alarm
触发时间。如果您指定的触发时间是过去的,则会立即触发警报。
或相同的here
如果规定的触发时间是过去的,则会立即触发警报。
为避免这种情况,您必须在添加警报之前手动检查警报,
get "fileName" "/user/Images/fileName"
如果日期是过去的话,请在接收方中忽略它们。
答案 1 :(得分:0)
正如David所说,在使用之前预先检查警报日期/时间;如果它是在过去,那么在将其提供给AlarmManager
之前添加一秒或一分钟或其他任何内容。
如果用户输入日期/时间,则以相同方式预先检查输入。
答案 2 :(得分:0)
如何创建BroadcastReceiver
来听取时间变化。
在Manifest
文件中,
<receiver android:name=".MyReceiver">
<intent-filter >
<action android:name="android.intent.action.TIME_SET"/>
</intent-filter>
</receiver>
和您的BroadcastReceiver
文件
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
Log.d("MyReceiver", "Time Changed");
// The times have changed; so have their signs.
updateYourAlarm();
}
}