2017-03-12 4 views
0

Ich versuche, eine Benachrichtigung jeden Tag um 6 Uhr mit Android AlarmManager zu senden. Die Benachrichtigung funktioniert einmalig und funktioniert nicht für andere Tage.Alarm Manager wiederholt sich nicht in Android

public class AlarmMsg extends WakefulBroadcastReceiver { 
// set the alarm 
public void setAlarm(Context context) { 
    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmIntent = PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmMsg.class), 0); 

    Calendar firingCal = Calendar.getInstance(); 
    Calendar currentCal = Calendar.getInstance(); 

    firingCal.set(Calendar.HOUR, 6); // hour 
    firingCal.set(Calendar.MINUTE, 0); 
    firingCal.set(Calendar.SECOND, 0); 

    long intendedTime = firingCal.getTimeInMillis(); 
    long currentTime = currentCal.getTimeInMillis(); 

    if (intendedTime >= currentTime) { 
     // set from today 
     alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, alarmIntent); 
    } else { 
     // set from next day 
     firingCal.add(Calendar.DAY_OF_MONTH, 1); 
     intendedTime = firingCal.getTimeInMillis(); 

     alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, alarmIntent); 
    } 
} 

und erstellen Sie die Meldung:

@Override 
    public void onReceive(Context context, Intent intent) { 
    // notification builder 
} 

und in meiner Haupttätigkeit Ich nenne nur die setalarm wie folgt aus:

new AlarmMsg().setAlarm(getApplicationContext()); 

dies eine Benachrichtigung bei 06.00 zeigt aber es zeigt nur 1 Benachrichtigung und es wiederholt sich nicht für die nächsten Tage. Ich möchte, dass die Benachrichtigung jeden Tag um 6 Uhr morgens angezeigt wird. Irgendwelche Ideen?

+0

erwerben Sie eine [Wecksperre] (https://developer.android.com/reference/android/os/PowerManager.WakeLock.html) in onReceive – shadygoneinsane

Antwort

0

Wenn Sie einmal einen Alarm erhalten haben, sind Sie auf dem richtigen Weg, denken Sie daran, den Alarmtyp AlarmManager.RTC_WAKEUP zu verwenden, damit das Gerät beim Ausschalten aufwacht. Ziehen Sie auch die Verwendung von setInexactRepeating in Betracht, wenn Ihr Alarm nicht kritisch ist.

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
     AlarmManager.INTERVAL_DAY, alarmIntent); 
Verwandte Themen