Erinnerungsfunktion für eigene App

  • Antworten:5
Tom
  • Forum-Beiträge: 9

25.04.2013, 09:59:54 via Website

Hallo liebe Forumsgemeinde,

ich würde gern eine Erinnerungsfunktion in meine App einbauen. Hierzu habe ich bereits herausgefunden das man mit Hilfe des AlarmManager Informationen in einem bestimmten Abstand anzeigen kann. Dies funktioniert auch soweit.
Code:
1Intent myIntent = new Intent(AndroidAlarmService.this, MyAlarmService.class);
2pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, myIntent, 0);
3
4 AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
5
6 Calendar calendar = Calendar.getInstance();
7 calendar.setTimeInMillis(System.currentTimeMillis());
8 calendar.add(Calendar.SECOND, 10);
9 alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

nun habe ich in einen Datenbank verschiedene Zeitpunkte zu dennen ich gern Informationen anzeigen würde.
Bsp.:
Zeitpunkt | Info
24.04.2013 15:00:00 | Info 1
24.04.2013 15:30:00 | Info 2
24.04.2013 16:00:00 | Info 3
24.04.2013 23:00:00 | Info 4
25.04.2013 10:00:00 | Info 5
27.04.2013 11:30:00 | Info 6

Leider ist mir im moment nicht ganz klar wie ich das am besten umsetzen könnte. Muss hier jeder Zeitpunkt einzeln mit calendar.add() hinzugefügt werden? Und was geschieht wenn ein Zeitpunkt hinzukommt oder gelöscht wird? Ich hatte überlegt ob die App nicht jeden Tag prüfen müsste, ob für den aktuellen Tag Erinnerungen verfügbar sind und diese dann erst mit calendar.add() einträgt.
Irgendwie stehe ich gerade etwas auf dem Schlauch und hoffe ihr könnt mir irgendwie weiterhelfen. Eventuell gibt es ja soetwas schon als Tuitorial oder so?

Vielen Dank,
Tom

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

25.04.2013, 10:47:52 via Website

Du hast PendingIntents, diese haben eine ID. Diese ID hat eine 1:1 Beziehung zu deinem Termin. Löscht du was im Kalender musst du die ID für den PendintIntent kennen und entsprechend diesen z.b löschen.

PS: Wenn das Device rebootet wird sind alle Pending Intents weg, diese müssen dann neu gesetzt werden.

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

Antworten
Andreas Hoffmann
  • Forum-Beiträge: 36

27.04.2013, 01:18:54 via App

Mac Systems


PS: Wenn das Device rebootet wird sind alle Pending Intents weg, diese müssen dann neu gesetzt werden.

Über einen BroadcastReceiver kannst du mitbekommen, wenn das smartphone neu gestartet ist. Dann musst du die Termine in deiner Datenbank erneut in den AlarmManager eintragen. Ansonsten wäre es sinnvoll dem AlarmManager beim hinzufügen oder löschen zu aktualisieren. Löschen geht glaube ich über ein PendingIntent mit der ID, die du beim hinzufügen verwendet hast.

Antworten
Tom
  • Forum-Beiträge: 9

28.04.2013, 20:16:49 via Website

Schönen guten Abend!

Vielen Dank für eure Antworten. Ihr habt mir damit sehr gehofen.
Ich habe den AlarmManager nun in denn BroadcastReceiver gepackt und nun werden die Einträge nach einem Neustart neu erzeugt.
Die Erinnerung wird auch ordnungsgemäss angezeigt und es ertönt auch ein Klingelton.
Perfekt wäre es allerdings erst, wenn ich nun noch irgendwie das Display automatisch angehen würde. Also immer dann wenn eine Erinnerung angezeigt wird. Könnt ihr mir da vieleicht noch einen Tip geben.

Viele Grüße,
Tom

Antworten
Tom
  • Forum-Beiträge: 9

29.04.2013, 15:24:55 via Website

Danke für den Tip.
Ich habe nun versucht ein WakeLock einzubauen. leider bleid der bildschirm weiterhin dunkenl :(

1public class AlarmBroadcastReceiver extends BroadcastReceiver {
2 @Override
3 public void onReceive(Context context, Intent intent) {
4 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
5 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
6 wl.acquire();
7
8 Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
9 scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
10 context.startActivity(scheduledIntent);
11 }
12}

In der manifest.xnl habe ich den Eitrag "<uses-permission android:name="android.permission.WAKE_LOCK" />" hinzugefügt.

Habe ich eventuell etwas falsch gemacht?

Viele Grüße,
Tom

Antworten