#android
#Android
Вопрос:
У меня есть ожидающее намерение, которое устанавливает аварийный сигнал, и оно принимает такие параметры, как идентификатор строки и время из базы данных. Я хочу отменить сигнал тревоги, поэтому я бы сделал это, отправив другое ожидающее намерение с той же информацией, а затем отменить (я хочу отменить его из другого файла). Я разрешаю устанавливать только один сигнал тревоги в любое время, потому что так работает мое приложение, потому что из этого ожидающего намерения установлен только один сигнал тревоги. В любом случае, я могу просто отменить все для этого намерения?
Ответ №1:
Поскольку я верю в примеры кода, чтобы донести суть, смотрите ниже:
/*
* An alarm can invoke a broadcast request
* starting at a specified time and at
* regular intervals.
*/
public void sendRepeatingAlarm()
{
Calendar cal = Utils.getTimeAfterInSecs(30);
String s = Utils.getDateTimeString(cal);
this.mReportTo.reportBack(tag, "Schdeduling Repeating alarm in 5 sec interval starting at: " s);
//Get an intent to invoke TestReceiver class
Intent intent = new Intent(this, TestReceiver.class);
intent.putExtra("message", "Repeating Alarm");
PendingIntent pi = this.getDistinctPendingIntent(intent, 2);
// Schedule the alarm!
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(),
5*1000, //5 secs
pi);
}
protected PendingIntent getDistinctPendingIntent(Intent intent, int requestId)
{
PendingIntent pi =
PendingIntent.getBroadcast(
this, //context
requestId, //request id
intent, //intent to be delivered
0);
//pending intent flags
//PendingIntent.FLAG_ONE_SHOT);
return pi;
}
/*
* An alarm can be stopped by canceling the intent.
* You will need to have a copy of the intent
* to cancel it.
*
* The intent needs to have the same signature
* and request id.
*/
public void cancelRepeatingAlarm()
{
//Get an intent to invoke TestReceiver class
Intent intent = new Intent(this, TestReceiver.class);
//To cancel, extra is not necessary to be filled in
//intent.putExtra("message", "Repeating Alarm");
PendingIntent pi = this.getDistinctPendingIntent(intent, 2);
// Schedule the alarm!
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.cancel(pi);
}
Комментарии:
1. Если у меня есть 10 напоминаний, связанных со средствами приложения, как я могу управлять уникальным идентификатором.? Есть ли какие-либо идеи по управлению идентификаторами?
2. @Karthick Было ли решение для этого?
Ответ №2:
У меня есть ожидающее намерение, которое устанавливает аварийный сигнал, и оно принимает такие параметры, как идентификатор строки и время из базы данных.
В a нет «параметров» PendingIntent
. Я собираюсь интерпретировать это как означающее «дополнительные».
Я хочу отменить сигнал тревоги, поэтому я бы сделал это, отправив другое ожидающее намерение с той же информацией, а затем отменить (я хочу отменить его из другого файла).
Это не «отправка», а «создание». В остальном, да, это правильно.
я могу просто отменить все для этого намерения?
Есть только один сигнал тревоги.
Дополнительные функции не имеют значения с точки зрения планирования аварийных сигналов. Если у вас есть Intent
(I1), завернутый в PendingIntent
(PI1), и вы используете его для планирования аварийного сигнала, а позже, если вы создадите Intent
(I2) с тем же компонентом / действием / данными / типом, оберните это в PendingIntent
(PI2) и cancel()
в аварийный сигнал, это отменит аварийный сигнал PI1. Аналогично, если вы используете PI2 для планирования нового сигнала тревоги, он удалит старый сигнал тревоги PI1.
Комментарии:
1. большое спасибо, ваш ответ многое прояснил о том, как отменить 🙂