Alarmmanager was passiert wenn ein Alarm vom System beendet wird?

  • Antworten:4
Gelöschter Account
  • Forum-Beiträge: 47

21.11.2016, 18:39:49 via Website

Abend, was passiert wenn mein Alarm vom System aus irgendwelchen Gründen aus dem Register entfernt wird. In der Android-Reference steht das die Anwendung gestartet wird. Nun wie kann ich sowas abfangen? z.B in meinem Broadcast-Receiver der den Intent von dem Alarmmanager auffängt?;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.11.2016, 22:14:12 via App

Hallo subrim!
Welches Beendet meinst du?
Das im Sinne von verworfen? - Nein ich denke nicht dass du ein Verwerfen mitbekommst. Passiet auch idr. nicht.
Du musst nur darauf achten dass du die Alarme zusätzlich speicherst und dann beim Boot wieder triggerst. Ansonsten fehlen die nach einem Neustart.

Oder Beendet im sinne von Zeit erreicht? -Dann bekommst du wie gewohnt ein Intent auf dein Browdcast Receiver.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 47

22.11.2016, 15:05:14 via Website

Darum hab ich mich schon gekümmert. Nur manchmal, wenn ich z.B ein Alarm auf den nächsten Tag setzte ist er weg. Bzw kommt da nichts mehr, das Gerät wurde auch nicht neugestartet oder ähnliches. Hab das Gefühl als würde das Betriebsystem meinen regiristrierten Alarm einfach entfernen. Halt als wäre er gelöscht.

Antworten
Gelöschter Account
  • Forum-Beiträge: 47

23.11.2016, 21:36:04 via Website

Da war ich auch schon unterwegs. Es ist alles der totale schrott, ich meine das kann doch nicht so schwer sein einen Alarm genau auf die Minute zu setzen und das Gerät vorher irgendwie aufzuwecken.
Mein Code sieht wie folgt aus:

*SetAlarm *

public void setAlarm(Context context, String datum, int hours, int minutes)
{
    Calendar myCalendar = parseMyStringToDate(datum);
    myCalendar.set(Calendar.SECOND, 0);
    myCalendar.set(Calendar.MINUTE, minutes);
    myCalendar.set(Calendar.HOUR_OF_DAY, hours);


    Log.i("RCService: ", "Alarm wird gesetzt.");



    AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(getContext().ALARM_SERVICE);

    Intent i = new Intent(getContext(), WakeLockKiller.class);
    i.setAction(normalNotifyAction);
    PendingIntent pi = PendingIntent.getBroadcast(getContext(), 0, i, 0);
    AlarmScheduler alarmScheduler = new AlarmScheduler(alarmManager, pi, myCalendar);

    Log.i("RCService: ", "Alarm wurde gesetzt: " + myCalendar.getTimeInMillis());
}

AlarmScheduler

public class AlarmScheduler

{
public AlarmScheduler(AlarmManager am, PendingIntent pi, Calendar calendar)
{
schedule(am, pi, calendar);
}

private static void schedule(AlarmManager am, PendingIntent pi, Calendar calendar)
{
    Log.e("AlarmScheduler: ", "Alarm wurde gesetzt");
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        am.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
    } else {
        am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
    }
}

}

Broadcast-Receiver

public class WakeLockKiller extends WakefulBroadcastReceiver

{
private static final String normalNotifyAction = "myaction"; //(Absichtlich veränder)
@Override
public void onReceive(Context context, Intent intent)
{
Log.e(getClass().getName(), "Received");
if(intent.getAction().equals(normalNotifyAction))
{
Intent startSynchMen = new Intent(context, SynchMen.class);
startSynchMen.setAction(intent.getAction());
startWakefulService(context, startSynchMen);
}
}
}

Und in der Manifest ist auch alles in Orndung, alles eingetragen. Es funktioniert ja, nur manchmal will mein Gerät einfach schlafen und nicht arbeiten (laughing).
Gibt es vielleicht eine andere Lösung einen Alarm vielleicht selber zu programmieren ?
Das man irgendwie einen Thread schlafen legt oder ähnliches.
Hab es damals mit einem eigenen Thread versucht, der einfach jede Minute eine Datenbankabfrage gestartet hat um zu überprüfen ob da irgendwas vorliegt (Ein Alarm), hat leider auch nicht funktioniert und es war sehr ineffizient. Dann habe ich noch versucht einen "repeatAlarm" zu setzten der jede minute ebenfalss wie oben das gleiche macht. Es war genau der selbe Schrott. Langsam reicht es mir, sitze schon seit einem Monat an einer Lösung. Ich meine wie macht es denn sonst der hauseigene Wecker von android?
Liebe Grüße

Antworten