Android 在安卓系统中,重复警报在精确的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

您好,我已经创建了一个警报,在精确的15分钟间隔之后,基于精确的警报,我正在创建一个重复的15分钟警报,但重复警报不完全工作

//计算精确的15分钟间隔

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);
    }