2016-04-17 12 views
-3

Obwohl diese Frage immer wieder hier auf SO wiederholt wird, aber keine der Lösungen funktionieren, sollte in dem Code darunter zum ersten Mal nach 10 Sekunden ab dem Start meiner Aktivität ausgelöst werden, aber es sofort starten. Und ich benutze FLAG_UPDATE_CURRENT, also gibt es keine vergangene Zeit, um sofort zu feuern, da ich es nicht zu einer bestimmten Stunde/Minute/Sekunde setze. Könnten Sie bitte meine Aufmerksamkeit auf das lenken, was mir fehlt?Mein AlarmManager feuert den Alarm sofort

Ich bin auf Android Testen 5.0 API Targeting 4.0+

  • compileSdkVersion 23
  • minSdkVersion 16
  • targetSdkVersion 23

    Intent myIntent = new Intent(this, check.class); 
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    

    am.setRepeating (AlarmManager.RTC, 10000 , (AlarmManager.INTERVAL_DAY/8), pi);

Und das ist mein check.class in AndroidManifest.xml

<receiver 
     android:name=".Check" 
     android:exported="false" /> 
+0

Ernsthaft Leute, die -1 für die Frage hinzugefügt, warum? Kennst du die Antwort? Dann teile es, und ich erklärte, dass ich hier nach den Antworten gesucht habe und sie nicht funktionieren, down vote ist kein Spielzeug, das du spielst, nur weil du es kannst. –

Antwort

7

10000 auf der Echtzeituhr wird immer in der Vergangenheit zu gehen, so dass Ihr Alarm Feuer sofort. Sie wollen System.currentTimeMillis() + 10000 als zweites Argument im setRepeating() Aufruf.

Ich würde darauf hinweisen, dass setRepeating() ist unexakt wie von KitKat, so dass die tatsächliche Zeit der Alarm ausgelöst werden kann. Wenn es darauf ankommt, verwenden Sie stattdessen die Methode setExact(), und stellen Sie den Alarm bei jedem Brand erneut für das gewünschte Intervall ein.

+2

Vielen Dank Mike für die Erklärung, vor allem der zweite Teil/edit, das war der Grund, warum ich dachte (während andere Lösungen auf die gleiche Frage anwenden), dass System.currentTimeMillis() 10000 zum ersten Trigger hinzugefügt wird. Nochmals vielen Dank, und ja, es ist nicht genau, aber es wird für den Zweck der Überprüfung tun. –

Verwandte Themen