ElectronReminder/app/src/main/java/ru/vfilippov/electronreminder/RecheckAlarmReceiver.java

83 lines
3.2 KiB
Java

package ru.vfilippov.electronreminder;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.v4.content.WakefulBroadcastReceiver;
import java.util.Calendar;
/**
* When the alarm fires, this WakefulBroadcastReceiver receives the broadcast Intent
* and then starts the service to do some work.
*/
public class RecheckAlarmReceiver extends WakefulBroadcastReceiver
{
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
public void onReceive(Context context, Intent intent)
{
/* For different suburban rechecks:
*
* ComponentName comp = new ComponentName(context.getPackageName(), MyService.class.getName());
* startWakefulService(context, (intent.setComponent(comp)));
*/
Intent service = new Intent(context, ElectronReminderService.class);
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, service);
}
/**
* Sets a repeating alarm that runs once a day at approximately 8:30 a.m. When the
* alarm fires, the app broadcasts an Intent to this WakefulBroadcastReceiver.
* @param context
*/
public void setAlarm(Context context)
{
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, RecheckAlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
// Set the alarm's trigger time to 8:30 a.m.
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);
// Set the alarm to fire at approximately 8:30 a.m., according to the device's
// clock, and to repeat once a day.
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
// Enable {@code RecheckBootReceiver} to automatically restart the alarm when the device is rebooted.
ComponentName receiver = new ComponentName(context, RecheckBootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
/**
* Cancels the alarm.
* @param context
*/
public void cancelAlarm(Context context)
{
// If the alarm has been set, cancel it.
if (alarmMgr != null)
alarmMgr.cancel(alarmIntent);
// Disable {@code RecheckBootReceiver} so that it doesn't automatically restart the
// alarm when the device is rebooted.
ComponentName receiver = new ComponentName(context, RecheckBootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}