0

Я внедрил класс 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 работать во многих экземплярах этого класса?

ответ

0

Учитывая код, до тех пор пока все места используют тот же Intent (указывая на Alarm_Activity.class) и используют один и тот же идентификатор (PendingIntent10000 в вашей выборке), ваш код будет отменить любой текущий PendingIntent.

Это не отменить любой ток сигнализация.

Чтобы отменить будильник, позвоните по телефону cancel() по телефону AlarmManager. В частности, если вы это сделаете, избавитесь от PendingIntent.FLAG_CANCEL_CURRENT, поэтому отмена старого PendingIntent не мешает вашему отмене старого сигнала тревоги, связанного с этим PendingIntent.

+0

ОК, поэтому вы бы назвали метод Alarmmanager.cancel(). Но для этого требуется ожидающее намерение, которое оно может исправить (а не только идентификатор). Как я могу получить доступ к этому PendingIntent из более чистого класса, если я уже закрыл класс, создающий PendingIntent? Im ищет «волшебную» функцию, такую ​​как Alarmmanager.cancelALL() .. – Trinitrotoluol

+0

@ user2379370: Правильно. Вы создаете «PendingIntent» с тем же идентификатором, той же операцией (например, активностью) и эквивалентом «Intent». Под «эквивалентом» я подразумеваю, что действие, компонент, категории, тип MIME и данные ('Uri') одинаковы. Следовательно, ваши первые две строки вашего примерного кода должны быть в порядке, чтобы отменить будильник, установленный с помощью этого же типа «PendingIntent». – CommonsWare

+0

Я пытался сделать это по-своему, но это не сработало. Я думаю, потому что 'PendingIntent.getActivity (** источник **, 10000, намерение, PendingIntent.FLAG_CANCEL_CURRENT);' должен иметь тот же источник, но в моем случае он hasnt. Могу ли я манипулировать оператором сравнения (намерения) или есть лучший способ? – Trinitrotoluol