Android Notifications Triggered By Alarm Manager Not Firing When App Is In Doze Mode


Answer :

Adding an intent Flag FLAG_RECEIVER_FOREGROUND

https://developer.android.com/reference/android/content/Intent#FLAG_RECEIVER_FOREGROUND prior to calling the broadcast receiver should do the trick

Intent intent = new Intent(context, ScheduleAllReceiver.class); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); PendingIntent scheduleAllPendingIntent = PendingIntent.getBroadcast(context, SCHEDULER_DAILY_ALL, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

I have faced the similar problems. I tried with work manager but the result was same. When phone is locked and is in doze mode the event are not triggered.

But for triggering event at exact time you need to use alarm manager only. It should work even in doze mode.

Method to register alarm manger(use set exact time instead of repeating)

public static void registerAlarm(Context context){     final int FIVE_MINUTES_IN_MILLI = 300000;     final int THIRTY_SECOND_IN_MILLI = 30000;     long launchTime = System.currentTimeMillis() + FIVE_MINUTES_IN_MILLI;     AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);     Intent i = new Intent(context, BroadcastAlarmManger.class);     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)         am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, launchTime, pi);     else am.setExact(AlarmManager.RTC_WAKEUP, launchTime, pi);     Utility.printLog("timestamp "+launchTime); } 

Broadcast receiver for alarm

public class BroadcastAlarmManger extends BroadcastReceiver {     @Override     public void onReceive(Context context, Intent intent) {         //register alarm again          registerAlarm(context);         .         .         .         .         //do your stuff         } } 

Manifest declaration

<receiver         android:name="com.taxiemall.utility.BroadcastAlarmManger"         android:enabled="true"         android:exported="true"/> 

Also you have to handle Reboot manually. After every reboot registered alarm are cleared. So register a broadcast receiver for Android reboot and register you alarm again inside it.


Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable