2010-08-02 7 views
1

J'essaie de programmer mon AlarmManager pour qu'il se réveille tous les jours avec un temps aléatoire différent qui se produit entre 22h00 et 06h00. ont mal une alarmeHoraire aléatoire de Alarm Manager avec Calendrier

public class AlarmReciver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
    try 
      { 
      System.out.println(TAG+": Alert recieved"); 
      schedualeNextTimeAlarming(context); 
      } catch (Exception e) 
      { 
      } 

private void schedualeNextTimeAlarming(Context context) 
{ 
     AlarmManager am = (AlarmManager) context 
    .getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, AlarmReciver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
    am.cancel(pi); 
    getNextTime(am, pi); 
} 

private void getNextTime(AlarmManager am, PendingIntent pi) 
{ 
    int max = 8; 
    int min = 1; 
    final Random myRandom = new Random(); 
    int result = myRandom.nextInt(max - min) + min; 
    int hourOfDay = 0; 

    switch (result) 
    { 
    case 0: 
     hourOfDay = 22; 
     break; 
    case 1: 
     hourOfDay = 23; 

     break; 
    case 2: 
     hourOfDay = 24; 
     break; 
    default: 
     hourOfDay = result; 

    } 
    hourOfDay = 15; //for testing 
    System.out.println("next time alert: "+hourOfDay+" seconds"); 

    Calendar cal = Calendar.getInstance(); 
    // cal.add(Calendar.DAY_OF_YEAR, 1); if i disable this line, the Alarm wont work at all. 
    cal.set(Calendar.HOUR_OF_DAY, 0); 
    cal.set(Calendar.MINUTE, 1); 
    cal.set(Calendar.SECOND, hourOfDay); 
    am.cancel(pi); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi); 

}

mon résultat attendu est que tous les 15 secodns:

J'ai essayé Technic, mais il ne marche pas semble fonctionner. c'est la sortie:

08-02 11:56:48.188: INFO/System.out(9138): InformationReceiver: Alert recieved 
08-02 11:56:48.198: INFO/System.out(9138): next time alert: 15 seconds 
08-02 11:56:48.218: INFO/System.out(9138): InformationReceiver: Alert recieved 
08-02 11:56:48.228: INFO/System.out(9138): next time alert: 15 seconds 
08-02 11:56:48.248: INFO/System.out(9138): InformationReceiver: Alert recieved 
08-02 11:56:48.248: INFO/System.out(9138): next time alert: 15 seconds 
08-02 11:56:48.278: INFO/System.out(9138): InformationReceiver: Alert recieved 
08-02 11:56:48.278: INFO/System.out(9138): next time alert: 15 seconds 
08-02 11:56:48.308: INFO/System.out(9138): InformationReceiver: Alert recieved 

Comme vous pouvez le voir, il ne marche pas d'alarme toutes les 15 secondes.

Je veux un nouveau temps d'alarme ACHIVE la situation de re-scheduale, chaque fois qu'il pénètre dans cette fonction

une solution ou d'autres suggestions efficaces serait la bienvenue.

Merci.

+1

Il serait très utile pour nous de savoir ce qui ne fonctionne pas. Existe-t-il une exception, n'y a-t-il pas d'alarme? – Janusz

+0

Il y a une alarme, le problème est que ça ne désactive pas le alivar preivouse .. bien que je fasse du cancle. Aussi le réveil d'Alaram n'est pas juste, mal éditer le code avec sortie – Moshik

Répondre

1

Il a déjà répondu Here... Pour désactiver cette alarme, vous devez d'abord obtenir l'instance d'origine.

public void unsetAlarm(View v) { 
     Intent myIntent = new Intent(MainActivity.this, 
       NotificationService.class); 
     notifyIntent = PendingIntent.getService(MainActivity.this, 0, 
       myIntent, 0); // recreate it here before calling cancel 

     alarmManager.cancel(notifyIntent); 
     Log.v(TAG, "cancelling notification"); 
    }