Диспетчер аварийных сигналов и уведомление, показывающее опоздание [дубликат]

вы должны сделать это, используя типы классов и метод IsAssignableFrom

  public class Program
{
public static void Main()
{
    A a = new A0();
    a.CheckDerived();

 }
}

class A0 : A {};
class A1 : A {};
class A2 : A {};
class A {
public void CheckDerived() {
    if(this.GetType().IsAssignableFrom(typeof(A0))) Console.Write("A0");
    if(this.GetType().IsAssignableFrom(typeof(A1))) Console.Write("A1");
    if(this.GetType().IsAssignableFrom(typeof(A2))) Console.Write("A2");
}
}
3
задан John Sardinha 7 June 2016 в 01:12
поделиться

3 ответа

Проблема, которую вы видите, - это способ, которым теперь работают повторяющиеся сигналы тревоги . Чтобы сохранить время автономной работы, AlarmManager теперь принимает большие свободы в перенастройке аварийных сигналов, чтобы группировать несколько сигналов тревоги вместе. В принципе, если вам нужно какое-то точное время, вы должны забыть об использовании setRepeating(). Вместо этого используйте setExact(). Если вам нужен повторный сигнал тревоги, просто сбросьте его, когда он погаснет.

1
ответ дан David Wasser 5 September 2018 в 09:10
поделиться

Похоже, что поле requestCode в вашем вызове getBroadcast не всегда делает его уникальным. См. Второй комментарий по этому вопросу: Что такое & quot; requestCode & quot; используется для PendingIntent?

Поскольку «лишнее» содержимое не различает их, кто-то обнаружил, что настройка разных данных в Intent сработала: https://stackoverflow.com / а / 33203752/508608

-1
ответ дан Community 5 September 2018 в 09:10
поделиться

Причиной этого является то, что намерения не являются индивидуальными. Они повторно используются, когда данные одинаковы (как в вашем случае)

Из doc :

Обычная ошибка, которую люди делают, это создайте несколько объектов PendingIntent с намерениями, которые изменяются только в их «лишнем» содержимом, и каждый раз он будет получать другой PendingIntent. Этого не происходит. Части намерения, которые используются для сопоставления, являются теми же, что определены Intent.filterEquals. Если вы используете два объекта Intent, которые эквивалентны Intent.filterEquals, тогда вы получите тот же PendingIntent для обоих из них.

0
ответ дан Erich 5 September 2018 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: