Ich versuche, eine Aufgabe am Ende jeden Tages zu wiederholen (23.59), dazu möchte ich alarmmanager.setRepeating() verwenden. In meinem Test habe ich ein bisschen Code entwickelt, von dem ich dachte, dass er jede Sekunde eine Aufgabe wiederholen würde, aber es funktioniert nicht jede Sekunde, sondern wiederholt die Aufgaben jede Minute, ich bin mir nicht sicher warum und deshalb bin ich mir nicht sicher kann es für jeden Tag arbeiten lassen. Hier ist mein Code:Android: AlarmManager recuring Aufgaben einmal am Tag um Mitternacht
public class RecurringTasks extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// add calculation logic here
Toast.makeText(context, "happening !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
}
public void setRecurringTasks(Context context)
{
AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, RecurringTasks.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 1000, pi);
}
public void cancelRecurringTasks(Context context)
{
Intent intent = new Intent(context, RecurringTasks.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
Das ist die Linie, die Probleme verursacht, wird denke ich:
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 1000, pi);
Ich dachte, das 1000 in miliseconds war? es sollte daher 1s sein? Hier
ist die Botschaft, die ich in meinem Logs erhalten:
D/DEBUG: im repeating
E/EGL_emulation: tid 3322: eglSurfaceAttrib(1165): error 0x3009 (EGL_BAD_MATCH)
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9773e540, error=EGL_BAD_MATCH
E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb2c768a0
SOLUTION
Android wird nicht zulassen, dass Sie eine Aufgabe in weniger als einer Minute wiederholen Aus diesem Grunde Mine war nur jede Wiederholung Minute. So verwalten Sie es jeden Tag um 23.59.59 zu machen wiederhole ich den folgenden Code verwendet:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23); // For 1 PM or 2 PM
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, RecurringTasks.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
Meinten Sie um 23.59? –
oups Ja, das ist, was ich meinte –