0

My app utilizes a alarm manager function the when fired runs a broadcaster, it is set to repeat daily at 7am using calendar.

Here is my current code:

        val mIntent = Intent(this, MyReceiver::class.java)

        val calendar: Calendar = Calendar.getInstance()
        calendar.timeInMillis = System.currentTimeMillis()
        calendar.set(Calendar.HOUR_OF_DAY, 7)
        calendar.set(Calendar.MINUTE, 0)
        if (calendar.timeInMillis < System.currentTimeMillis()) {
            calendar.add(Calendar.DAY_OF_MONTH, 1)
        }
        
        val mPendingIntent = PendingIntent.getBroadcast(this, 1, mIntent, PendingIntent.FLAG_UPDATE_CURRENT
        )
        val mAlarmManager = this
            .getSystemService(Context.ALARM_SERVICE) as AlarmManager
        mAlarmManager.setRepeating(
            AlarmManager.RTC_WAKEUP, calendar.timeInMillis,1000*60*60*24, mPendingIntent,
        )

I know doze mode effects alarms and I think it's causing my receiver to run late/not fully. So I would like to bypass this. I know I should use setExactAndAllowWhileIdle but this doesn't work with my calendar repeating method. I was wondering if there was something like a 'setRepeatingAndAllowWhileIdle' function or something I could use? But if not, how would I achieve a optimal way of doing this?

Joshu
  • 39
  • 7

1 Answers1

0

u can use setExactAndAllowWhileIdle()