83 lines
3.2 KiB
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);
|
|
}
|
|
}
|