Ниже приведена простая процедура вызова тревоги, запишите количество форели, которую я хочу поймать:
private void setReminder() {
Intent intent = new Intent(this, AlarmReceiver5.class);
int trout = 21;
intent.putExtra("intData", trout);
intent.putExtra("textData",
"Great day for fishing! How many trout you want to get today? ");
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 15 * 1000, sender);
}
Когда я запускаю его впервые, BroadcastReceiver правильно видит, что я хочу поймать 21 форель сегодня.
Я изменил номер на 22 в Eclipse, запустил его снова, получатель все еще видит 21! Независимо от того, как я пытаюсь здесь, включая удаление программы из Android, получатель всегда получает старый номер.
Теперь, если я переименую класс получателя из AlarmReceiver5 в AlarmReceiver6, тогда он может успешно получить другой номер. Но затем произошло то же самое, то есть независимо от того, как я изменил номер, получатель всегда получает старый номер, пока я не переименую класс.
Однако, если я изменю имена элементов в Bundle (т. Е. «IntData» и «textData» в приведенном выше примере), получатель вообще ничего не сможет получить! Число становится 0. Конечно, я обновил сторону получателя соответственно.
Вышесказанное верно, даже если я использовал классы ApiDemo AlarmController и OneShotAlarm.
Теперь, если я немного подправлю код, я отменил будильник перед установкой следующего будильника, тогда получатель ничего не получает, число равно 0. См. Код ниже:
private void setReminder() {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver5.class);
// Cancel the alarm
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
am.cancel(sender);
// Then set it again (using a newly created PendingIntent).
sender = PendingIntent.getBroadcast(this, 0, intent, 0);
int trout = 21;
intent.putExtra("intData", trout);
intent.putExtra("textData",
"Great day for fishing! How many trout you want to get today? ");
sender = PendingIntent.getBroadcast(this, 0, intent, 0);
am.cancel(sender);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 15 * 1000, sender);
}
Может кто-нибудь объяснить, что думает взломанный Android AlarmManager? Спасибо! (Возможно, я не смогу увидеть ваш ответ в течение нескольких часов, потому что я отправляюсь на рыбалку после публикации этого сообщения.)