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

68 lines
2.7 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
{
@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 (or cancels) 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 static void setAlarm(Context context, boolean active)
{
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, RecheckAlarmReceiver.class);
intent.setAction("refresh_all");
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
if (active)
{
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
// FIXME Remove hardcoded time
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);
}
else
alarmMgr.cancel(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,
active ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}