Dans mon application, il y a une option pour que l'utilisateur répète son événement, et chaque récurrence de cet événement répétitif aura une notification (une alarme) pour rappeler à l'utilisateur que son événement va bientôt commencer .Comment définir une alarme à l'intérieur d'un broadcastreceiver
Alors, quand la première alarme est appelée, elle ouvre la BroadcastReceiver, crée la notification et doit régler l'alarme pour la prochaine récurrence:
@Override
public void onReceive(Context context, Intent intent) {
// When onReceive gets called the event notification is triggered
DatabaseHelper myDatabaseHelper = new DatabaseHelper(context);
// Create notification
int id = intent.getIntExtra("id", 0);
String name = intent.getStringExtra("name");
long notificationTime = intent.getLongExtra("notificationTime", 0);
String recurrenceType = intent.getStringExtra("recurrenceType");
String message = intent.getStringExtra("message");
if (recurrenceType.equals("Every week")) {
// repeatInterval = unix timestamp so * 1000 to get in Millis for notificationTime
long repeatInterval = 604800 * 1000;
notificationTime += repeatInterval;
myDatabaseHelper.updateNotificationTime(notificationTime);
setAlarm(context, intent, id, name, notificationTime, recurrenceType, message);
} else {
myDatabaseHelper.updateNotificationTime(0);
}
createNotification(context, message, name, id);
}
}
Maintenant, cela fonctionne très bien pour la première alarme de l'événement. La notification est créée. Maintenant, lorsque la deuxième alarme est appelée, l'intention est vide, donc après la première alarme toutes les autres intentions sont vides et une notification vide est créée, puis l'application se bloque avec NullPointerException. Remarque: je garde mon application ouverte et mon appareil. La méthode setAlarm (...) est dans la classe BroadcastReceiver.
Comment définir mes alarmes:
Stacktrace:
08-25 12:12:35.917 19323-19323/com.madgusto.when2game E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.madgusto.when2game, PID: 19323
java.lang.RuntimeException: Unable to start receiver com.madgusto.when2game.alarm.AlarmReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3018)
at android.app.ActivityThread.-wrap18(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1544)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.madgusto.when2game.alarm.AlarmReceiver.onReceive(AlarmReceiver.java:48)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3011)
at android.app.ActivityThread.-wrap18(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1544)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
pointeur Alors null à:
if (recurrenceType.equals("Every week")) {
Maintenant, comment puis-je passer à régler une alarme dans un broadcastreceiver la bonne façon? Merci!
Je travaille encore sur toute aide serait l'apprécier! –