У меня есть небольшое приложение, которое можно использовать для установки напоминаний о будущих событиях. Приложение использует AlarmManager, чтобы установить время напоминания пользователю. Когда сигнал тревоги отключается, BroadcastReceiver регистрирует это и, в свою очередь, запускает службу для уведомления пользователя через тост и уведомление в строке состояния.
Для отображения правильной информации в уведомлении и тосте, некоторая дополнительная информация передается вместе с намерением. Когда регистрируется напоминание в первый раз, информация, полученная BroadcastReceiver и переданная службе, является правильной. Но для каждого последующего напоминания (то есть для каждого нового намерения, полученного BroadcastReceiver) эта информация остается неизменной, даже если отправленная информация отличается.
В качестве примера, если строка «foo» ставится как дополнительная с первым намерением, «foo» правильно извлекается BroadcastReceiver. Если «bar» добавляется как дополнительный во втором намерении, «foo» все еще извлекается BroadcastReceiver.
Это код, который регистрирует тревогу и передает намерение (основной класс пользовательского интерфейса):
Intent intent = new Intent(ACTION_SET_ALARM);
intent.putExtra("desc", desc);
intent.putExtra("time", time);
intent.putExtra("dbId", dbId);
intent.putExtra("millis", millis);
PendingIntent pIntent = PendingIntent.getBroadcast(quickAlert.this, 0, intent, 0);
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, millis, pIntent);
Метод onReceive () - в классе BroadcastReceiver:
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AlertService.class);
String desc = intent.getStringExtra("desc").equals("") ? "": ": " + intent.getStringExtra("desc");
String time = intent.getStringExtra("time");
long dbId = intent.getLongExtra("dbId", -1);
long millis = intent.getLongExtra("millis", -1);
i.putExtra("desc", desc);
i.putExtra("time", time);
i.putExtra("dbId", dbId);
i.putExtra("millis", millis);
Log.d(TAG, "AlertReceiver: " + desc + ", " + time + ", " + dbId + ", " + millis);
Toast.makeText(context, "Reminder: " + desc, Toast.LENGTH_LONG).show();
context.startService(i);
}
Фильтр намерений в манифесте:
<receiver android:name=".AlertReceiver">
<intent-filter>
<action android:name="com.aspartame.quickAlert.ACTION_SET_ALARM" />
</intent-filter>
</receiver>
Я застрял с этим в течение некоторого времени, поэтому помощь очень ценится!