Я пытаюсь написать приложение для Android, которое будет отключать телефон в определенное время, и для этого я использую комбинацию AlarmManager
и BroadcastReceiver
согласно this tutorial. Я использую отдельный класс, который будет содержать метод для настройки события с использованием AlarmManager
, чтобы я мог использовать этот метод в нескольких своих действиях. Код для этого класса выглядит следующим образом:Android AlarmManager и BroadcastReceiver clarfications
public class EventScheduler {
public static void schedule(Event event) {
Calendar start = event.getStartTime();
Calendar end = event.getEndTime();
String status = event.getStatus();
Context ctx;
Intent intent = new Intent(ctx, AlarmReceiver.class);
intent.putExtra("start_time", start);
intent.putExtra("end_time", end);
intent.putExtra("status", status);
PendingIntent sender = PendingIntent.getBroadcast();
AlarmManager am = (AlarmManager) getSystemSerivce(ALARM_SERVICE);
}
public static void unschedule(Event event) {
}
}
Мой первый вопрос - инициализировать объект намерения. Поскольку этот метод определен в классе, который не расширяет Activity, он не имеет контекста (ctx
), но этот метод будет использоваться в классах, которые расширяют Activity, поэтому как бы получить контекст этих классов для использования в инициализация намерения?
Мой второй вопрос - инициализировать PendingIntent. PendingIntent.getBroadcast()
должен принимать 4 параметра, так как еще раз, как бы получить контекст класса, вызывающего этот метод для использования в качестве первого параметра? Также в документации говорится, что второй параметр, requestCode не используется, означает ли это, что это может быть 0
?
Мой третий вопрос касается инициализации AlarmManager. Опять же поле ALARM_SERVICE
связано с объектом контекста, и какой контекстный объект я бы использовал в этом случае?
Могу ли я использовать контекст, который я передаю для каждого экземпляра контекста в этом методе, похоже, что в учебнике они используют два разных контекста, один - это 'ctx', а другой - контекст класса? – azrosen92
@ azrosen92 - да, любой 'Context' будет делать в случае связанных с AlarmManager действий. Как правило, для создания компонентов пользовательского интерфейса требуется определенный тип «Контекст» (для которого требуется «Активность»). Вот хороший пример того, что «Context» делает: http://www.doubleencore.com/2013/06/context/ – ianhanniballake
Спасибо! Эта статья очистила много вещей до – azrosen92