Мое приложение должно вызывать тревогу в точное или почти точное время, поэтому я использую setExact и setAndAllowWhileIdle.
Теперь я попытался перенести эти тревоги в onRecieve вещательного приемника. Теперь будильник продолжает срабатывать каждые 2 секунды, даже если начальная транзакция для менеджера тревог составляет 16 минут.
** Включена инициализация AlarmManagerСоздание основной активности **
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), NotificationBroadcast.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), RQ_SYNC_SERVICE_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
long sixteenMinute = 60 * 1000 * 16;
if (Build.VERSION.SDK_INT < 19) {
alarmManager.set(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
} else if (19 <= Build.VERSION.SDK_INT && Build.VERSION.SDK_INT < 23) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
} else if (Build.VERSION.SDK_INT >= 23) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
}
код onRecieve of вещательный приемник
@Override
public void onReceive(Context context, Intent intent) {
//reset Alarm
Log.d(TAG,"alarm reset");
long sixteenMinute = 60 * 1000 * 16;
AlarmManager alarmManager = (AlarmManager)context.getSystemService(ALARM_SERVICE);
Intent intent2 = new Intent(context, NotificationBroadcast.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, RQ_SYNC_SERVICE_CODE, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT < 19) {
alarmManager.set(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
} else if (19 <= Build.VERSION.SDK_INT && Build.VERSION.SDK_INT < 23) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
} else {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
}
}
logcat сигнал тревоги запускается каждые 2 секунды