我正在使用Android AlarmManager,我在我的代码中发现了一个问题。警报管理器也会在不同的时间被调用,我找不到原因,我在上午7:10发出警报但每当我在不同的时间打开应用程序时就会调用它,如3:10下午4:30,等等。
MyCode:
public void setAlarm(){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 10);
calendar.set(Calendar.AM_PM,Calendar.AM);
Intent intent = new Intent(appContext, MyAlarmManager.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(appContext, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) appContext.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
MyAlarmManager.java
public class MyAlarmManagerextends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
setAlarm();
} }
所以,这是上面的代码,请让我知道代码中的错误,并建议我解决一些问题。
答案 0 :(得分:1)
这种情况正在发生,因为警报是在过去设置的(当你在07:10 AM之后的任何时间设置它)所以,如果它已经过了今天上午07:10,你必须加1天。
说明 -
假设今天是上午8点而你正在为07:10设置闹钟,它会在07:10 AM的同一天设置闹钟已经过去,因此每当你打开应用程序时它就会熄灭
解决方案 -
选项1 - 设置日期,月份和年份也是如此 -
calendar.set(Calendar.DATE, date);
calendar.set(Calendar.MONTH, month);
选项2 - 检查当前时间是什么,如果当前时间>闹钟时间,警报添加一天
//If you are past 07:10 AM then
calendar.add(Calendar.DATE,1);
答案 1 :(得分:1)
如果您使用的是Android版Marshmallow或更高版本,可能会发生这种情况。它被称为打盹模式
实施打盹模式是为了通过延迟AlarmManager
,SyncAdapter
,JobScheduler
等内容来节省电池电量。请参阅this link以了解有关打盹模式的更多信息