Ожидающее намерение Android?

#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. большое спасибо, ваш ответ многое прояснил о том, как отменить 🙂