2017-07-08 2 views
-1

Je dois configurer une alarme dans un certain intervalle de temps. Pour y parvenir, j'ai écrit:Le gestionnaire d'alarmes ne fonctionne pas sous Android

classe TestFragment

private void setupAlarmManager(){ 
    AlarmManager manager = manager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE); 
    Intent alarmIntent = new Intent(getContext(), AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), i, alarmIntent, PendingIntent.FLAG_ONE_SHOT); 
    manager.set(AlarmManager.RTC_WAKEUP,1499510100000L, pendingIntent); 
    manager.set(AlarmManager.RTC_WAKEUP,1499510220000L, pendingIntent); 
} 

classe AlarmReceiver

public class AlarmReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show(); 
} 

}

Je mets le point de débogage à Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show(); mais rien ne se passe.

= 16 heures 1499510100000L 16h03 = 1499510220000L

Qu'est-ce que je fais mal ici? En outre, je veux ajouter une notification locale dans la méthode onReceive.

+0

'4PM = 1499510100000L 4:03 PM = 1499510220000L' ** FAUX **. Ces valeurs sont les * millisecondes * que le gestionnaire d'alarmes est supposé attendre depuis que vous l'avez exécuté. Ce n'est pas ** une valeur de temps **. En passant, 1499510100000 correspond à environ '47 ans et demi'. Vous ne voulez probablement pas attendre si longtemps pour voir si votre alarme se déclenche ...;) –

+1

d'où vient 1499510100000L? utiliser un calendrier à la place. –

+0

@Rotwang @Mehran Cette valeur pourrait être erronée. Je vais le vérifier mais ces valeurs proviennent de la base de données qui stocke le temps en millisecondes en utilisant la bibliothèque de temps 'Java.Util'. Je ne peux pas utiliser 'new Date(). GetTime()' au lieu de 'Calendar' ici? –

Répondre

1

Vous devez utiliser un objet Calendar pour définir l'heure de l'alarme.

Pour une alarme à 16 heures, vous pouvez faire quelque chose comme:

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

Ensuite, vous configurez votre AlarmManager comme vous l'avez déjà fait, mais pour la dernière utilisation de la ligne:

alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

Peut-être que vous voulez utiliser une alarme répétée ou même un Handler

Si oui, vous devriez visiter: https://developer.android.com/training/scheduling/alarms.html

+0

Ces valeurs proviennent de la base de données qui stocke l'heure en millisecondes en utilisant la bibliothèque de temps 'Java.Util'. Je ne peux pas utiliser 'new Date(). GetTime()' au lieu de 'Calendar' ici? Let's je reçois deux fois (pourrait être plus) en millisecondes. –

+0

Parce que j'ai déjà une date en millisecondes et le calendrier fera aussi la même chose –