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"