Skip to content Skip to sidebar Skip to footer

Sounding Alarm With The Pending Intent In Android

I am following a tutorial to build an android app that allow users to store time (hours an minutes) into their local sqlite database. This Time stored is checked with the calendar

Solution 1:

I just edited your code as per your necessity. The alarm date is 11th February 2016. Be sure to replace with your database data. I think you have the AlarmService and AlarmScreen class done. If not you can let me know i will edit. For now the AlarmManagerHelper should look like below.

public class AlarmManagerHelper extends BroadcastReceiver {

public static final String ID = "id";
public static final String NAME = "name";
public static final String TIME_HOUR = "timeHour";
public static final String TIME_MINUTE = "timeMinute";
public static final String TONE = "alarmTone";

@Override
public void onReceive(Context context, Intent intent) {
    setAlarms(context);
}

public static void setAlarms(Context context) {
    cancelAlarms(context);

    AlarmDBHelper dbHelper = new AlarmDBHelper(context);

    List<AlarmModel> alarms =  dbHelper.getAlarms();

    for (AlarmModel alarm : alarms) {
        if (alarm.isEnabled) {

            PendingIntent pIntent = createPendingIntent(context, alarm);

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.DAY_OF_MONTH,11); //sample date
            calendar.set(Calendar.YEAR,2016);//sample year. plz add yours from db
            calendar.set(Calendar.MONTH,01);//sample month
            calendar.set(Calendar.HOUR_OF_DAY, alarm.timeHour);
            calendar.set(Calendar.MINUTE, alarm.timeMinute);
            calendar.set(Calendar.SECOND, 00);


            //Find next time to set
            final int nowDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
            final int nowHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
            final int nowMinute = Calendar.getInstance().get(Calendar.MINUTE);
            final int nowDate = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
            final int nowMonth = Calendar.getInstance().get(Calendar.MONTH);
            final int nowYear = Calendar.getInstance().get(Calendar.YEAR);
            boolean alarmSet = false;
            if(nowYear<=2016 && nowMonth<=01 && nowDate<=11 ) //change 2016,01,11 with user given data (from database)
            {
                if(nowHour<=alarm.timeHour)
                        {
                            if (nowMinute<alarm.timeMinute)
                            {
                                setAlarm(context, calendar, pIntent);
                                alarmSet = true;


                            }
                    }
           }
        }
    }
}

@SuppressLint("NewApi")
private static void setAlarm(Context context, Calendar calendar, PendingIntent pIntent) {
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
    }
}

public static void cancelAlarms(Context context) {
    AlarmDBHelper dbHelper = new AlarmDBHelper(context);

    List<AlarmModel> alarms =  dbHelper.getAlarms();

    if (alarms != null) {
        for (AlarmModel alarm : alarms) {
            if (alarm.isEnabled) {
                PendingIntent pIntent = createPendingIntent(context, alarm);

                AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                alarmManager.cancel(pIntent);
            }
        }
    }
}

private static PendingIntent createPendingIntent(Context context, AlarmModel model) {
    Intent intent = new Intent(context, AlarmService.class);
    intent.putExtra(ID, model.id);
    intent.putExtra(NAME, model.name);
    intent.putExtra(TIME_HOUR, model.timeHour);
    intent.putExtra(TIME_MINUTE, model.timeMinute);
    intent.putExtra(TONE, model.alarmTone.toString());

    return PendingIntent.getService(context, (int) model.id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
}

Post a Comment for "Sounding Alarm With The Pending Intent In Android"