Android 在安卓系统中,重复警报在精确的15分钟间隔内不工作
您好,我已经创建了一个警报,在精确的15分钟间隔之后,基于精确的警报,我正在创建一个重复的15分钟警报,但重复警报不完全工作 //计算精确的15分钟间隔Android 在安卓系统中,重复警报在精确的15分钟间隔内不工作,android,alarmmanager,android-alarms,Android,Alarmmanager,Android Alarms,您好,我已经创建了一个警报,在精确的15分钟间隔之后,基于精确的警报,我正在创建一个重复的15分钟警报,但重复警报不完全工作 //计算精确的15分钟间隔 public static long calculateInterval() { Calendar calendar = Calendar.getInstance(); int m = calendar.get(Calendar.MINUTE); Calendar alarm = Calendar
public static long calculateInterval() {
Calendar calendar = Calendar.getInstance();
int m = calendar.get(Calendar.MINUTE);
Calendar alarm = Calendar.getInstance();
alarm.set(Calendar.HOUR_OF_DAY, Integer.parseInt(getCurrentTimeIn24Hrs().split(":")[0]));
alarm.set(Calendar.MINUTE, Integer.parseInt(getCurrentTimeIn24Hrs().split(":")[1]));
alarm.set(Calendar.SECOND, 0);
alarm.set(Calendar.MILLISECOND, 0);
long start = alarm.getTimeInMillis();
long remain = 0;
if (m < 15) {
remain = 15 - m;
} else if (m < 30) {
remain = 30 - m;
} else if (m < 45) {
remain = 45 - m;
} else {
remain = 60 - m;
}
remain = start + remain * 60 * 1000;
return remain;
}
public void setAlarm() {
Log.i("Service++++", "Alarm set");
Intent myIntent = new Intent(mContext, SetAlarm.class);
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 1234, myIntent, 0);
int ALARM_TYPE = AlarmManager.RTC;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
am.setExact(ALARM_TYPE, Utility.calculateInterval(), pendingIntent);
else
am.set(ALARM_TYPE, Utility.calculateInterval(), pendingIntent);
}
你设置了不准确的警报。根据: 注意:从API 19(KITKAT)开始,警报传递是不精确的:操作系统将切换警报,以尽量减少唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参见设置窗口(int,long,long,pendingent)和设置精确窗口(int,long,pendingent)。targetSdkVersion早于API 19的应用程序将继续看到之前的行为,其中所有警报都会在请求时准确传递
因此,像第一次报警一样使用
alarmManager.setExact()
,每15分钟重新启动一次。没有正确地显示。在一个以15分钟定期间隔触发的警报内,您正在设置另一个也以15分钟间隔重复的警报?@Radhey First alarm我正在计算下一个精确的15分钟,基于此,我正在为每15分钟间隔创建一个重复警报为什么您要这样计算#精确的15分钟!只需按照毫秒设置15分钟的间隔。就是这样。在完成15分钟的定期第一次报警后,也会更新您创建的第二次报警。在精确的15分钟内不应触发报警,例如10:00、10:15、10:30等,第一次报警中没有问题。重复报警是问题AlarmManager.setExact()这将每15分钟自动重复一次,或者我需要重新启动?@Shan否。您从报警中捕获意图并重新启动它(每15分钟一次)。
public void setRepeatingAlarm() {
Intent alarmIntent = new Intent(mContext, UpdateServiceAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 1236, alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 0);
calendar.add(Calendar.MILLISECOND, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
}