Alarm + BroadcastReceiver

  • Antworten:4
Wdmprojekt
  • Forum-Beiträge: 33

06.02.2011, 09:56:14 via Website

Kann mir jemand bitte erklären, warum mein AlarmReceiver nicht nur beim Broadcast aktiv
wird, sondern gleich beim Starten der App sich kontinuierlich jede Sekunde meldet?
Ich würde mich über ein Code-Snippet freuen, dass dieses Problem beben kann :)

Manifest
1<application ...>
2...
3<receiver android:process=":remote" android:name=".AlarmReceiver"></receiver>
4</application>

AlarmReceiver
1public class AlarmReceiver extends BroadcastReceiver {
2
3 @Override
4 public void onReceive(Context context, Intent intent) {
5 Toast.makeText(context, "Alarm!", Toast.LENGTH_LONG).show();
6 }
7}

FireAlarm
1Intent intent = new Intent(this, AlarmReceiver.class);
2
3PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
4
5AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
6
7// Fire Service in 30 seconds, each second
8alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 30000, 10 * 1000, sender);

— geändert am 06.02.2011, 10:05:38

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

06.02.2011, 11:03:39 via Website

Was heisst beim Starten der APP ? Alarme sind per se so das die APP nicht laufen muss um einen Alarm zu empfangen.

Ich denke das lässt sich damit begründen das du die Startzeit falsch setzt, und nicht die Aktuelle Systemzeit berücksichtigst:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() , NORMAL_INTERVAL, pendingIntent);

— geändert am 06.02.2011, 11:03:57

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Wdmprojekt
  • Forum-Beiträge: 33

06.02.2011, 14:41:26 via Website

Verstehe ich dich nun richtig, dass die Methode setRepeating() statt der dynamisch erzeugten Long Werte
nun die System Zeit in Millisekunden erhalten muss? Wo setze ich dann die Millisekunden, die bis zur Zielzeit vergehen müssen?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

06.02.2011, 14:50:52 via Website

Die Zielzeit ist der Startzeitpunkt + Interval bei einem "Dauer Alarm" Schau doch einfach mal in die Api Doc an der stelle.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Wdmprojekt
  • Forum-Beiträge: 33

06.02.2011, 15:08:11 via Website

ADD: Ich habe auf einen einmaligen Alarm gewechselt !

Ich habe bereits in die API Doc gesehen, es dann wohl aber noch nicht verstanden.

set (int type, long triggerAtTime, PendingIntent operation)

int type = ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC oder RTC_WAKEUP
long triggerAtTime = Zeit zu der der Alarm aus gehen soll
PendingIntent operation = Aktion die ausgeführt werden soll, wenn der Alarm ausgeht

Bislang bin ich davon ausgegangen, dass der Alarm hier "scharf" geschaltet, also aktiviert und nicht deaktiviert wird...

Wo gebe ich denn nun an, dass mein Alarm erst in 30000 Millisekunden starten soll, also in 30 Sekunden?

— geändert am 06.02.2011, 15:40:07

Antworten