Вы можете использовать класс AlarmManager для планирования повторяющегося сигнала тревоги с PendingIntent
, который будет выполнять вашу работу по расписанию.
https://developer.android.com/training/scheduling/alarms
Я дам вам пример ежедневной тревоги, выполняющей работу при увольнении:
public void setDailyAlarmOn(Context context, long alarmTime, Uri reminderTask, long repeatTime) {
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent operation =
yourJobHere.getReminderPendingIntent(context, reminderTask);
if (Build.VERSION.SDK_INT >= 23) {
manager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, repeatTime, operation);
} else {
manager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, repeatTime, operation);
}
}
alarmTime - впервые за миллисекунды, когда предполагается срабатывание тревоги
repeatTime - время в миллисекундах - 86400000 за 24 часа (1000 * 60 * 60 * 24)
Uri RemderTask - URI, который я создал, чтобы не отменять предыдущие тревоги, короче говоря, это код приложения тревоги, и это URI из строки в базе данных.
операция - PendingIntent, которую вам нужно будет создать
Я сделал это, расширив IntentService и обработав задание в onHandleIntent
:
YourJobHere.class:
public class YourJobHere extends IntentService {
private static final String TAG = YourJobHere.class.getSimpleName();
public static PendingIntent getReminderPendingIntent(Context context, Uri uri) {
Intent action = new Intent(context, YourJobHere.class);
action.setData(uri);
return PendingIntent.getService(context, 0, action, PendingIntent.FLAG_UPDATE_CURRENT);
}
public YourJobHere() {
super(TAG);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
//TODO: make your job here
}
}
Если хотите, можете обратиться к моему полному проекту на GitLab:
https://gitlab.com/Domin_PL/SlothProfileScheduler
Надеюсь, это поможет вам