Android alarmmanger 在不同的时间被调用?
Android alarmmanger gets called in different time?
我正在研究 Android AlarmManager,我在我的代码中发现了一个问题。警报管理器也在不同的时间被调用,我不知道是什么原因,我在 7:10 AM 发出警报但是每当我在 3:10 PM 等不同时间打开应用程序时它都会被调用, 4:30 PM等
我的代码:
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();
} }
所以,这是上面的代码,请让我知道代码中有什么问题并建议我一些解决方案。
发生这种情况是因为闹钟是在过去设置的(当您在 07:10 AM 之后的任何时间设置它时)因此,如果今天已经过了 07:10 AM,您必须添加 1 天。
解释-
假设今天是早上 8 点,您要为 07:10 设置闹钟,它会在同一天设置闹钟 07:10 上午,这已经过去了,因此只要您打开它就会响起应用
解-
选项 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);
如果您使用的是 Android 版本的 Marshmallow 或更高版本,则可能会发生这种情况。它被称为 打瞌睡模式
打瞌睡模式通过延迟 AlarmManager
、SyncAdapter
、JobScheduler
等内容来节省电池电量。请参阅 this link 以了解有关打瞌睡模式的更多信息
我正在研究 Android AlarmManager,我在我的代码中发现了一个问题。警报管理器也在不同的时间被调用,我不知道是什么原因,我在 7:10 AM 发出警报但是每当我在 3:10 PM 等不同时间打开应用程序时它都会被调用, 4:30 PM等
我的代码:
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();
} }
所以,这是上面的代码,请让我知道代码中有什么问题并建议我一些解决方案。
发生这种情况是因为闹钟是在过去设置的(当您在 07:10 AM 之后的任何时间设置它时)因此,如果今天已经过了 07:10 AM,您必须添加 1 天。
解释-
假设今天是早上 8 点,您要为 07:10 设置闹钟,它会在同一天设置闹钟 07:10 上午,这已经过去了,因此只要您打开它就会响起应用
解-
选项 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);
如果您使用的是 Android 版本的 Marshmallow 或更高版本,则可能会发生这种情况。它被称为 打瞌睡模式
打瞌睡模式通过延迟 AlarmManager
、SyncAdapter
、JobScheduler
等内容来节省电池电量。请参阅 this link 以了解有关打瞌睡模式的更多信息