Я внедрил класс Alarm, который должен установить новый ожидающий Intent и всегда перезаписывать старый. (Я бы предпочел остановить/удалить все старые, но я не знаю, как)PendingIntent во множестве экземпляров
private void startAlarm(){
Intent intent = new Intent(source, Alarm_Activity.class);
// 10000 should be the ID of Intent
PendingIntent pendingIntent = PendingIntent.getActivity(source, 10000, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager)source.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent);
}
Unfortionatly Я создаю это несколько раз класса и от различных видов деятельности. Я думаю, что это причина, по которой он не отменяет последнее намерение (Flag_cancel_current). Как я могу заставить Flag работать во многих экземплярах этого класса?
ОК, поэтому вы бы назвали метод Alarmmanager.cancel(). Но для этого требуется ожидающее намерение, которое оно может исправить (а не только идентификатор). Как я могу получить доступ к этому PendingIntent из более чистого класса, если я уже закрыл класс, создающий PendingIntent? Im ищет «волшебную» функцию, такую как Alarmmanager.cancelALL() .. – Trinitrotoluol
@ user2379370: Правильно. Вы создаете «PendingIntent» с тем же идентификатором, той же операцией (например, активностью) и эквивалентом «Intent». Под «эквивалентом» я подразумеваю, что действие, компонент, категории, тип MIME и данные ('Uri') одинаковы. Следовательно, ваши первые две строки вашего примерного кода должны быть в порядке, чтобы отменить будильник, установленный с помощью этого же типа «PendingIntent». – CommonsWare
Я пытался сделать это по-своему, но это не сработало. Я думаю, потому что 'PendingIntent.getActivity (** источник **, 10000, намерение, PendingIntent.FLAG_CANCEL_CURRENT);' должен иметь тот же источник, но в моем случае он hasnt. Могу ли я манипулировать оператором сравнения (намерения) или есть лучший способ? – Trinitrotoluol