1

Le plan de l'application est de déclencher une notification tous les jours à 7 heures, ce qui fonctionne déjà. Les choses sont que la première fois que l'application est lancée, il demande des données de connexion qui fonctionne également en général, mais l'application se bloque si l'utilisateur n'a pas soumis assez rapidement.PendingIntent semble démarrer lors de l'initialisation

C'est le code dans le MainActivity qui fonctionne si l'utilisateur n'a pas déjà présenté:

Calendar calendar = Calendar.getInstance(); 
        calendar.set(Calendar.HOUR_OF_DAY, 7); 
        calendar.set(Calendar.MINUTE, 0); 
        calendar.set(Calendar.SECOND, 0); 

        Intent intent1 = new Intent(this, NotificationClass.class); 
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 100, intent1, 0); 
        AlarmManager am = (AlarmManager) getSystemService(MainActivity.this.ALARM_SERVICE); 
        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

je suppose que NotificationClass est commencé parce que la « source » de l'accident est le code de la loadText.java qui est démarré par NotificationClass. Le plan est qu'il commence seulement tous les jours à 7 heures du matin comme mentionné. Est-ce que quelqu'un connaît ce problème ou a une idée? J'ai déjà essayé différents drapeaux.

Merci d'avance!

Erreur dans logcat:

08-22 14:54:02.217 2762-2762/de.kurt.vertretungsplan E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: de.kurt.vertretungsplan, PID: 2762 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'org.jsoup.select.Elements org.jsoup.nodes.Element.select(java.lang.String)' on a null object reference 
                      at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:112) 
                      at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:35) 
                      at android.os.AsyncTask.finish(AsyncTask.java:667) 
                      at android.os.AsyncTask.-wrap1(AsyncTask.java) 
                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
08-22 14:54:02.232 1247-1293/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property 
08-22 14:54:02.295 1462-3018/system_process E/EGL_emulation: tid 3018: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 
+0

On ne sait vraiment pas quel est le problème, mais si vous demandez un correctif pour le déclenchement de l'alarme immédiatement, jetez un oeil ici: https://stackoverflow.com/questions/36535575/android-prevent-immediate- trigger-of-alarm-service-if-alarm-time-a-passé-pour. –

+0

Merci :). Ça fonctionne maintenant! – quidproquo

Répondre

0

Vous obtenez une instance Calendar et régler le temps de 7:00:00. Cela définit l'heure Calendar à 7:00:00 le jour en cours.

Alors vous faites ceci:

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

Ceci définit une alarme qui se déclenche à 07:00:00 aujourd'hui puis à 07:00:00 tous les jours après. En supposant que vous exécutez ce code après 7:00:00, l'alarme se déclenchera immédiatement parce que l'heure de l'alarme est passée.

Pour éviter cela, vous devez vous assurer que l'heure Calendar est supérieure à l'heure actuelle. Si ce n'est pas le cas, vous devez ajouter un jour à l'heureavant d'appeler le am.setRepeating().

Comme @MikeM. suggéré, voir android prevent immediate trigger of alarm service if alarm time has passed for the day pour plus de détails.

+0

Merci, c'est tout! – quidproquo