Alarmmanager - mehrere Alarme

Z

zumafx

Fortgeschrittenes Mitglied
58
Moin :)

Ich möche in meiner App einige Erinnerungen ausgeben, die der User einstellen kann. Hier mal die codeschnipsel

Activity Einstellungen (hier werden die Alarme erstellt)
Code:
// die Intents erstellen (im oncreate)
        Intent aiMorgen = new Intent(getApplicationContext(), AlarmReceiver.class);
        aiMorgen.putExtra("Alarmtyp", 1);
        piMorgen = PendingIntent.getBroadcast(getApplicationContext(), 1, aiMorgen, 0);

        Intent aiMittag = new Intent(getApplicationContext(), AlarmReceiver.class);
        aiMittag.putExtra("Alarmtyp", 2);
        piMittag = PendingIntent.getBroadcast(getApplicationContext(), 2, aiMittag, 0);

im onStop der Einstellungen rufe ich dann eine startmethode auf, in der ich die Alarme starte.
Code:
public void start(int std, int min, int typ) {

        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        String toasttext = "";
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(System.currentTimeMillis());
        int interval = 30000; // AlarmManager.INTERVAL_DAY

        switch (typ) {
            case 0:
                cal.set(Calendar.HOUR, std);
                cal.set(Calendar.MINUTE, min);

                toasttext = getString(R.string.ErinnerungAutoSet);

                manager.setRepeating(AlarmManager.RTC_WAKEUP,
                        cal.getTimeInMillis(),
                        interval,
                        piAutostart);
                break;

            case 1:
                cal.set(Calendar.HOUR, std);
                cal.set(Calendar.MINUTE, min);

                toasttext = getString(R.string.ErinnerungMorgensSet);

                manager.setRepeating(AlarmManager.RTC_WAKEUP,
                        cal.getTimeInMillis(),
                        interval,
                        piMorgen);
                break;
            case 2:
                .....

Im AlarmReceiver passiert nur das durchreichen des typs
Code:
public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Intent service1 = new Intent(context, AlarmService.class);
        service1.putExtra("Alarmtyp", intent.getIntExtra("Alarmtyp", -1));
        context.startService(service1);
    }

}

die eigentlich Arbeit macht dann der Alarmservice
Code:
public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);

        PendingIntent contentIntent = null;
        String meldung = "";
        int alarmTyp;
        alarmTyp = intent.getIntExtra("Alarmtyp", -1);

        switch(alarmTyp) {
            case 0 :
                meldung = getString(R.string.StimmErfassennotify);
                contentIntent = PendingIntent.getActivity(getApplicationContext(),
                                            0,
                                            new Intent(getApplicationContext(),
                                                        StimmungErfassen.class),
                                            PendingIntent.FLAG_ONE_SHOT);
                break;

            case 1 :
                meldung = getString(R.string.MediMorgennotify);
                contentIntent = PendingIntent.getActivity(getApplicationContext(),
                                            1,
                                            new Intent(getApplicationContext(),
                                                        StimmungErfassen.class),
                                            PendingIntent.FLAG_ONE_SHOT);
                break;

als ich nur einen Alarm drin hatte, lief das auch. Dann habe ich einige Änderungen gemacht (Texte in strings, die "typ"-zahlen in die strings.xml)
und "Aufräumarbeiten".
Wenn ich da debugge, wird der Alarm auch gefeuert, aber im Receiver kommt nichts an.
Mag da mal einer drüber gucken und mir auf die Sprünge helfen ?
Ich seh evtl. auch bloss den Wald vor lauter Bäumen nicht mehr ..


vielen Dank
 
Edit:
nach dem Ausschalten/wieder starten des Handy und Neustart von Androidstudio funktioniert es nun wieder.
Hab noch eine Änderung gemacht, bei
Code:
    PendingIntent.getBroadcast(getApplicationContext(), 1, aiMorgen, 0);
habe ich den letzten Parameter (0) durch ein Flag ersetzt (PendingIntent.FLAG_UPDATE_CURRENT)
ist also erledigt.

Zusammenfassung für die, die auch Probleme mit Alarmen haben:
1. In Manifest receiver und Service registrieren (enabled=True nicht vergessen)
2. Klasse in Alarmreceiver.java anlegen (siehe oben)
3. Klasse in AlarmService.java anlegen (siehe oben)
in 2. das onReceive() überschreiben(@Override), in 3. das onStart(...) ebenfalls überschreiben.
Hier im Forum gefunden und ebenfalls wichtig:
Beim PendingIntent.getBroadCast() den 2ten Parameter eindeutig machen (int requestCode).
dann sollte es laufen
 

Ähnliche Themen

B
  • Braesident
Antworten
7
Aufrufe
1.587
markus.tullius
markus.tullius
B
Antworten
1
Aufrufe
801
swa00
swa00
S
  • SlayNox
Antworten
0
Aufrufe
686
SlayNox
S
Zurück
Oben Unten