'Alarm Receiver not working after upgrade from API 23 to 29

Alarm Receiver is not working. I have upgraded from API 23 to 29, and after that it's not working.

How do I turn on the alert again and Receive the notification?

public class PrayerTimeReminderService extends IntentService {
    public static final String ACTION_REMIND = 
        "com.example.application.PrayerTimeReminderService.REMIND";
    public static final String ACTION_SCHEDULE = "com.example.application.PrayerTimeReminderService.SCHEDULE";
    
    public PrayerTimeReminderService() {
        super("PrayerTimeReminderService");
    }
    
    public static void setReminder(Context context, Bundle prayerTimeReminderExtras) {
        Intent intent = new Intent(context, PrayerTimeReminderService.class);
        intent.putExtras(prayerTimeReminderExtras);
        intent.setAction(ACTION_REMIND);
    
        context.startService(intent);
    }
    
    public static void setScheduler(Context context) {
        Intent intent = new Intent(context, PrayerTimeReminderService.class);
        intent.setAction(ACTION_SCHEDULE);
    
        context.startService(intent);
    }
    
    @Override protected void onHandleIntent(Intent intent) {
        if (intent != null) {
            String action = intent.getAction();
    
            switch (action) {
                case ACTION_REMIND:
                    showNotification(intent);
                    break;
                case ACTION_SCHEDULE:
                    schedule();
                    break;
            }
        }
    }
    
    public static void setSchedulerAlarm(Context context) {
        Log.debug(PrayerTimeReminder.class, "Scheduling an alarm to reschedule prayer time reminders tomorrow...");
    
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Intent intent = new Intent(context, PrayerTimeReminderBroadcastReceiver.class);
        intent.setAction(PrayerTimeReminderService.ACTION_SCHEDULE);
    
        PendingIntent operation = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    
        DateTime schedulerTime = DateTime.now().withTimeAtStartOfDay().plusDays(1).plusSeconds(1);
    
        alarmManager.set(AlarmManager.RTC_WAKEUP, schedulerTime.getMillis(), operation);
    }
    
    public static void setPrayerTimeReminderAlarm(Context context, PrayerTimeReminder prayerTimeReminder) {
        Log.debug(PrayerTimeReminder.class, "Scheduling prayer time reminder for '%s'...", prayerTimeReminder);
    
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    
        Intent intent = new Intent(context, PrayerTimeReminderBroadcastReceiver.class);
        intent.putExtras(prayerTimeReminder.toBundle());
        intent.setAction(PrayerTimeReminderService.ACTION_REMIND);
    
        PendingIntent operation = PendingIntent.getBroadcast(context, prayerTimeReminder.index, intent, 0);
    
        alarmManager.set(AlarmManager.RTC_WAKEUP, prayerTimeReminder.reminderTime.toDateTimeToday().getMillis(), operation);
    }
    
    private void showNotification(Intent intent) {
        Bundle extras = intent.getExtras();
    
        Optional<PrayerTimeReminder> maybePrayerTimeReminder = PrayerTimeReminder.fromBundle(extras);
    
        if (maybePrayerTimeReminder.isDefined()) {
            PrayerTimeReminder prayerTimeReminder = maybePrayerTimeReminder.get();
    
            Log.debug(getClass(), "Showing notification for '%s'...", prayerTimeReminder);
    
            String localizedPrayerTimeName = PrayerTimesOfDay.prayerTimeLocalizedName(this, prayerTimeReminder.prayerTimeType);
            int remainingMinutes = Pref.Reminders.timeToRemind(this, prayerTimeReminder.prayerTimeType);
            String title = prayerTimeReminder.isOnPrayerTime ? getString(R.string.reminders_notificationOnPrayerTime_title) : getString(R.string.reminders_notification_title);
            String body = prayerTimeReminder.isOnPrayerTime ? getString(R.string.reminders_notificationOnPrayerTime_summary, localizedPrayerTimeName) : getString(R.string.reminders_notification_summary, remainingMinutes, localizedPrayerTimeName);
            String sound = Pref.Reminders.sound(this, prayerTimeReminder.prayerTimeType);
            boolean vibrate = Pref.Reminders.vibrate(this, prayerTimeReminder.prayerTimeType);
    
            Intent launchIntent = new Intent(this, PrayerTimesActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, launchIntent, 0);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                    .setContentTitle(title)
                    .setContentText(body)
                    .setTicker(title)
                    .setAutoCancel(true)
                    .setSmallIcon(R.drawable.ic_mosque)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_mosque))
                    .setContentIntent(pendingIntent)
                    .setDefaults(Notification.DEFAULT_LIGHTS);
            Notification notification = notificationBuilder.build();
    
            if (!sound.isEmpty()) {
                notification.sound = Uri.parse(sound);
            }
            if (vibrate) {
                notification.defaults |= Notification.DEFAULT_VIBRATE;
            }
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(0, notification);
        }
    }
    
    private void schedule() {
        Log.debug(getClass(), "Rescheduling prayer time reminders...");
    
        PrayerTimeReminder.reschedulePrayerTimeReminders(this);
        PrayerTimesWidgetBase.updateAllWidgets(this);
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source