Ich bin zur Zeit ein Problem mit Benachrichtigungen in meiner Anwendung zu debuggen. Für einen bestimmten Kontext möchte ich Benachrichtigungen planen, die immer dann erscheinen sollen, wenn ein Raketenstart stattfindet. Was ich tat, war, nachdem ich eine Liste von geplanten Starts von einer API erhalten hatte, nahm ich das Startdatum (in Millisekunden seit dem 1. Januar 1970) und subtrahiere die System.currentTimeMillis()
davon. Ich würde dann die resultierende Zeit verwenden, um die Benachrichtigung in der Zukunft zu planen, dargestellt als System.currentTimeMillis() + timeDifference
. Ich habe festgestellt, dass aus irgendeinem Grund nur 1 Benachrichtigung angezeigt wird.Terminplanung für mehrere zukünftige Benachrichtigungen
Ich habe das Debuggen versucht, indem ich Benachrichtigungen nach 2, 4 und 6 Minuten in der Zukunft plane, jedoch wird eine Benachrichtigung erst nach 6 Minuten angezeigt.
Einige relevante Code ist unten:
public void scheduleNotifications(List<Launch> launches) {
for(int i = 0; i < launches.size(); i++) {
SimpleDateFormat format = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss z");
Date date = null;
try {
date = format.parse(launches.get(i).getWindowstart());
} catch (ParseException e) {
e.printStackTrace();
}
long timeBetween = date.getTime() - System.currentTimeMillis();
Integer id = Long.valueOf(date.getTime()).intValue();
Intent notificationIntent = new Intent(this, NotificationPublisher.class);
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, id);
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, getNotification(launches.get(i).getRocket().getName(), launches.get(i).getLocation().getPads().get(0).getName()));
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//Debug. Schedule at 2, 4, 6 minutes.
if (i == 0) {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 120000, pendingIntent);
}
if (i == 1) {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 240000, pendingIntent);
}
if (i == 2) {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 360000, pendingIntent);
}
}
}
private Notification getNotification(String rocketName, String padName) {
Notification.Builder builder = new Notification.Builder(this);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);
builder.setContentIntent(pendingIntent);
builder.setContentTitle("Upcoming Launch");
builder.setContentText("A launch of a " + rocketName + " is about to occur at " + padName + ". Click for more info.");
builder.setSmallIcon(R.drawable.rocket_icon);
return builder.build();
}
Broadcast-Empfänger:
public class NotificationPublisher extends BroadcastReceiver {
public static String NOTIFICATION_ID = "notification_id";
public static String NOTIFICATION = "notification";
public void onReceive(Context context, Intent intent) {
NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = intent.getParcelableExtra(NOTIFICATION);
int id = intent.getIntExtra(NOTIFICATION_ID, 0);
notificationManager.notify(id, notification);
}
}
Ich würde gerne wissen, warum nur eine einzige Meldung jemals präsentiert wird, als auch, was ich brauche hinzufügen um das vorher erklärte Ziel zu erreichen.
Großartig, danke. Ich habe den Parameter 'requestCode' durch eine eindeutige Ganzzahl ersetzt (in diesem Fall nur den Wert von' i') und erhalte jetzt mehrere Benachrichtigungen. – Orbit