2017-01-03 4 views
2

Ich habe ein Problem mit dem AlarmManager. Ich bin in der Lage den Alarm mit diesem CodeAlarmManager wird nicht in einer bestimmten Zeit ausgelöst

private void setAlarm(long when) { 
    Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class); 
    intent.putExtra("ID", note.getId()); 
    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
    Toast.makeText(getApplicationContext(),"Reminder set up", Toast.LENGTH_SHORT).show(); 
} 

Dieser Code funktioniert gut einrichten, wenn ich long when = 5 * 1000; \\For example 5secs later gesetzt, aber wenn ich diesen Code verwenden

Calendar calendar = Calendar.getInstance(); 
        calendar.setTime(date); 
        long selectedDate = date.getTime(); 
        long timeSince1970 = System.currentTimeMillis(); 
        long timeForAlarm = selectedDate - timeSince1970; 

        Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class); 
        intent.putExtra("ID", note.getId()); 
        AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
        Toast.makeText(getApplicationContext(),"Reminder set for "+calendar.getTime().toString(), Toast.LENGTH_SHORT).show(); 

meinen Alarm Triggerd 2secs später. Was mache ich falsch? :/ Ich habe versucht AlarmManager.ELAPSED_REALTIME_WAKEUP und AlarmManager.RTC_WAKEUP aber nichts geändert.

Bitte überprüfen Sie meine Frage nicht als dupliziert. Ich habe nichts gefunden, was mein Problem lösen könnte.

+1

(Tipp:. Erklären der Gemeinschaft nicht etwas als Duplikat schließen wird nichts ändern, wenn es wirklich ein Duplikat ist Allenfalls wird es nur helfen Holen Sie sich mehr für die Schließung.): - \ –

+0

@JonAdams Das stimmt. haha –

Antwort

3

Unter der Annahme, dass Sie in Android Studio arbeiten (wenn nicht - Sie müssen wechseln), klicken Sie F1, während der Textzeiger auf set Methode und Beschreibung von AlarmManager::set lesen.

Hinweis: Anfang in API 19, die Auslösezeit an diese Methode übergeben ist als ungenau behandelt: Der Alarm wird nicht vor diesem Zeitpunkt geliefert werden, aber aufgeschoben werden kann und geliefert einige Zeit später. Das Betriebssystem verwendet diese Richtlinie, um Alarme gemeinsam über das gesamte System zu "stapeln", wodurch die Anzahl der Male minimiert wird, die das Gerät benötigt, um aufzuwachen und den Batterieverbrauch zu minimieren. Im Allgemeinen werden Alarme, die in der Nähe von geplant sind, nicht zurückgestellt, solange Alarme weit in der Zukunft geplant sind.

+0

Also, gibt es eine Möglichkeit, meinen Alarm zu planen? Sollte ich die Berechtigung set_alarm oder etwas ähnliches verwenden? –

+0

Mann, ich gab Ihnen bereits einen Link und sagte, wie man Docs in AS verwenden. Nur was Sie tun müssen, ist zu lesen. Hier copy-past from doc: 'Wenn Ihre Anwendung starke Bestellanforderungen hat, gibt es andere APIs, die Sie verwenden können, um das erforderliche Verhalten zu erhalten. Siehe setWindow (int, long, long, PendingIntent) und setExact (int, long, PendingIntent) .' – Divers

0

Statt Set Verwendung setExact

manager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
+0

Hat nicht funktioniert:/Das gleiche Problem. Alarm ausgelöst nach 2 Sekunden. –

Verwandte Themen