我正在使用AlarmManager发出警报。我不确定为什么不起作用,随时请求更多代码。预先谢谢你。
MainActivity.java
button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
int y = calendar.get(Calendar.YEAR);
int mon = calendar.get(Calendar.MONTH);
int d = calendar.get(Calendar.DAY_OF_MONTH);
if (ampm.equals("pm")){
h=h+12;
}
calendar.set(y, mon, d, h, m);
alarmIntent =PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * intervalMinute, alarmIntent);
} else {
if (alarmMgr!=null) {
alarmMgr.cancel(alarmIntent);
}
}
没有错误。
答案 0 :(得分:0)
setRepeating
等效于API级别19+上的setInexactRepeating
。从文档中:
注意:从API 19开始,所有重复警报都是不精确的。如果你的 应用程序需要精确的交付时间,因此必须使用一次 确切的警报,每次重新安排的时间如上所述。遗产 targetSdkVersion早于API 19的应用程序 继续保持所有警报,包括重复警报, 视为精确。
您需要根据目标API级别调用set
,setExact
或(也许)setAlarmInfo
,并手动安排重复警报。
此外,请仔细检查您设置下一个闹钟时间的逻辑,因为现在看来我太复杂了。您可以这样做:
final Calendar c = Calendar.getInstance();
c.add(1, Calendar.DAY_OF_MONTH); //Just an example
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
我已经在GitHub上发布了一个警报应用,该应用也可能有用(link)。