2017-04-18 2 views
2

Je travaille sur une application de widget où je dois effectuer une tâche dans chaque minute. Donc, j'utilise AlarmManager pour y parvenir. Mais peu importe ce que je définis l'intervalle de temps, il est répété toutes les 5 secondes.Android Gestionnaire d'alarmes répète après 5 secondes et en ignorant l'intervalle

J'utilise AlarmManager comme ceci:

final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarm.cancel(pendingIntent); 
     long interval = 60000; 
     alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), interval, pendingIntent); 

Merci à l'avance.

Répondre

3

AlarmManager.ELAPSED_REALTIME est utilisé pour déclencher l'alarme depuis le démarrage du système. Alors que AlarmManager.RTC utilise l'heure UTC.

alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), interval, pendingIntent); 

Cela commencer à courir après démarrage du système et répète à l'intervalle spécifié.

alarm.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), interval, pendingIntent); 

Cela commencer à courir à partir de maintenant et répète à l'intervalle spécifié.

Pour résoudre le problème, je suggère d'utiliser AlarmManager.RTC. Si vous voulez commencer l'alarme après 1 minute, puis répéter, puis passer la deuxième param comme ceci:

calendar.getTimeInMillis() + interval 

Consultez également le documentation android et ce answer pour plus d'explications dans les alarmes.

+0

Merci pour votre aide. L'ajout de l'intervalle au second paramètre (c'est-à-dire triggerAtMillis) a fonctionné pour moi. – rajesh

+0

@rajesh Content de vous aider. S'il vous plaît marquer la réponse comme acceptée si elle vous a aidé;) –

+0

Juste pour ajouter;), AlarmManager.RTC, Cette alarme ne réveille pas l'appareil; S'il s'éteint alors que l'appareil est en veille, il ne sera pas livré avant la prochaine activation de l'appareil. – dhams

0

Essayez cette alarmManager.setRepeating (AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 60000, pendingIntent);

+0

Essayé cela mais cela n'a pas fonctionné, toujours confronté au même problème. – rajesh

0

Dans mon appareil (Nexus5 CM13), il peut bien fonctionner en utilisant ci-dessous le code:

private void doWork() { 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, SecondActivity.class), 0); 
     final AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarm.cancel(pendingIntent); 
     long interval = 60000; 
     alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 
      interval, pendingIntent); 
    } 

donc je ne sais pas clairement, et vous pouvez essayer « setRepeating » pour les tests.

+0

J'utilise MotoG3 avec le niveau 23 de l'API. J'ai essayé d'utiliser les deux (c'est-à-dire setRepeating() et setInexactRepeating()) mais j'étais confronté au même problème. Réponse donnée par FAЯAƸ travaillé pour moi. Merci d'avoir essayé. – rajesh