Я тревога, созданной в OnBootReceiver так:Отменить сигнал тревогу с другим контекстом
public class OnBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
Intent i = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), savedIntervalAutomaticMilisInt, pendingIntent);
}
}
Но отменить его, я использую этот код в деятельности:
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
scManager.clearErrors();
Так, чтобы установить это я использую контекст из параметра Context BroadcastReceiver, но для его отмены я использую контекст this
из Activity. Мой вопрос: будет ли будильник еще отменен, хотя контекст немного отличается?
Хорошо, спасибо, но почему это может вызвать проблему? – Xander
@Merlin: 'FLAG_CANCEL_CURRENT' говорит« nuke предыдущий экземпляр «PendingIntent» с орбиты ». Независимо от того, какая структура данных, используемая Android для хранения сигналов тревоги, может быть задана командой «PendingIntent» и может полагаться на экземпляры «PendingIntent» одинаковыми, основываясь на нормальной конструкции «PendingIntent». IOW, не бросайте флаги волей-неволей - используйте только FLAG_CANCEL_CURRENT, когда вы точно знаете, зачем вам это нужно в конкретной ситуации. – CommonsWare
Я использую флаг, потому что, когда я воссоздаю сигнал тревоги в OnBootReceiver, и по какой-то причине будильник не был отменен, когда телефон загрузился, я не делаю будильник дважды. – Xander