'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 |
|---|
