2016-05-10 5 views
0

Ich möchte in meiner Anwendung einen täglichen Alarm auslösen. Ich kann sehen, dass der Alarm täglich zur richtigen Zeit für 2 oder 3 Tage ausgelöst wird, aber danach nicht mehr ausgelöst wird. Wenn zum Beispiel der Alarm um 08:00 Uhr morgens ausgelöst wird, wird er täglich um 8:00 Uhr für 2 oder 3 Tage ausgelöst und danach wird kein Alarm ausgelöst. Es gibt keine App-Abstürze oder irgendetwas, es löst einfach nicht aus. Ich habe einen BroadcastReceiver registriert (in AndroidManifest.xml) für diesen Alarm und ich kann sehen, Protokolle werden täglich zur richtigen Zeit gedruckt, aber nur für 2 oder 3 Tage. Danach gibt es keine Aktivität und die App scheint einfach abzuklingen.Tagesalarm nicht ausgelöst nach 2 oder 3 Tagen

finden Sie meinen Code unten:

final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
final long intervalDay = 60*60*24*1000L; 
final long alarmTime = calendar.getTimeInMillis(); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, intervalDay, pendingIntent); 

ich auch alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, AlarmManager.INTERVAL_DAY, pendingIntent); verwendet haben, aber es machte keinen Unterschied (nur knapp sein Ziel erwarten, dass es jede obwohl machen).

Ich möchte nicht alarmManager.setInexactRepeating() verwenden, da es nicht den Alarm zur genauen Zeit auslöst, aber es gibt eine kleine Verzögerung.

Jede Hilfe wird geschätzt !!

Danke.

+0

Mögliches Duplikat von http://stackoverflow.com/questions/25330826/alarmmanager-stops-working-after-a-few-days – Techidiot

Antwort

0

Das liegt daran, dass Android den Alarminhalt nicht länger als 2-3 Tage halten kann. Obwohl es keine sichere Schusslösung gibt, die ich kenne.

Ich habe es repariert, indem ich den Alarm abbringe und zurücksetze, wenn der Alarm ausgelöst wird. So etwas wie das. Anstelle der Verwendung von setRepeat Verwendung eingestellt oder setExact auszulösen einmal:

if(android.os.Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) { 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmtime, pendingIntent); 
} else { 
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmtime, pendingIntent); 
} 

Dann in onRecieve() Methode Ihrer alarmReciever nach Ihrer Aufgabe durchführen, setzen Sie den Alarm wieder für das nächste, gefolgt von alle anstehenden Absichten Cancelling:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), reminderModal.get_remindID(), intent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager alarmManager = (AlarmManager) context.getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
alarmManager.cancel(pendingIntent); 
pendingIntent.cancel(); 

Hoffe es hilft.

Verwandte Themen