Будильник срабатывает каждую секунду? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть функция повторять сигнал каждые 15 минут.

Проблема в том, что она стреляет каждую секунду.

У меня есть это в моей основной деятельности:

 AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intentn = new Intent(context, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentn, 0);
        Calendar time = Calendar.getInstance();
        time.setTimeInMillis(System.currentTimeMillis());

        if(android.os.Build.VERSION.SDK_INT>=23) {
            alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,1000*900, pendingIntent);
        }
        else{
            alarmMgr.setExact(AlarmManager.RTC_WAKEUP, 1000*900, pendingIntent);
        }

и я повторил то же самое выше в моем AlarmReceiver onReceive (), чтобы установить его снова после его запуска.

есть идеи, что не так и что я могу сделать, чтобы это повторилось правильно?

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Прежде всего, вы устанавливаете будильник без добавления текущего времени.См. Ниже:

...
alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 1000*900, pendingIntent);
...
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, 1000*900, pendingIntent);
...

вместо этого должно быть

...
alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time + 1000*900, pendingIntent);
...
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, time + 1000*900, pendingIntent);
...

Во-вторых, существует функция, позволяющая сделать именно то, что, я считаю, вы пытаетесь выполнить здесь (установить повторяющуюся сигнализацию).См. setRepeating().

0 голосов
/ 22 мая 2019

Попробуйте использовать менеджер работника Android, поскольку он также работает в режиме ожидания. https://developer.android.com/reference/androidx/work/PeriodicWorkRequest#min_periodic_interval_millis

...