Wöchentliche Benachrichtigung(Notification) von der App ohne Gooogle-Server

  • Antworten:4
Philip M.
  • Forum-Beiträge: 90

16.02.2012, 17:07:05 via Website

Guten Abend liebe Android-Gemeinde,

ich habe mal wieder eine Frage und hoffe das hier einer von euch Rat weiß. (:
Ich habe nun meine erste App fast vervollständigt, habe aber nun das Problem, dass wenn der Nutzer es ausgewählt hat, eine Wöchentliche Errinerung bekommt. Quasi wie eine Notification, nur nicht über den Google-Server. Ist es möglich, auch wenn die App nicht direkt läuft, zu überprüfen ob wir das Datum haben, welches ich in der App-Datenbank als nächstes Erinnerungs-Datum gespeichert habe und dementsprechend eine Notification zu senden?

Dazu kommt nun auch noch, dass beim Klick auf diese Notification in die App gesprungen werden soll und ich ein bestimmtes Fenster öffnen möchte. Denke hierfür muss ich irgendwie überprüfen können, ob die App normal gestartet worden ist, oder über die Notification. Ist sowas möglich? Zu allem überfluss, und auch nur wenn es möglich ist, würde ich dieser Notification auch noch gerne Daten anhängen welche ich beim Start der App auswerten könnte (z.B. welcher Eintrag die Errinerungs-Notification ausgelöst hat).

So... hoffe das ist nun auch nicht zu viel. Letzendlich möchte ich nur wissen ob mein Grundgedanke so in der Form möglich ist und das man mir vielleicht einen kleinen Hinweis in die richtige Richtung gibt. (:

Ich danke allen im Voraus die sich mit meinem Problem beschäftigen und wünsche euch noch einen schönen Abend.

Antworten
Florian B.
  • Forum-Beiträge: 284

16.02.2012, 18:55:16 via Website

Das ist alles möglich, was du dir da vorstellst. ;)

Für zeit-gesteuerte Aktionen kannst du den AlarmManger nutzen.

Antworten
Philip M.
  • Forum-Beiträge: 90

17.02.2012, 09:02:21 via Website

Besten Dank, das ist genau das was ich gesucht habe. (:

Dann mal ran an die Arbeit und falls noch Probleme auftauchen sollten die mir unlösbar erscheinen, meld ich mich einfach wieder D:

Antworten
Philip M.
  • Forum-Beiträge: 90

17.02.2012, 10:53:45 via Website

Sooo... ich hab nun eigentlich alles genauso wie ich will, nur das problem welches ich jetzt habe ist, das wenn das Smartphone neu gestartet wird, oder der RAM expliziet geleert wird, ich keine Nachricht mehr erhalte.

Erstellen tu ich das nun wie folgt:
1// get a Calendar object with current time
2 Calendar cal = Calendar.getInstance();
3 cal.setTimeInMillis(System.currentTimeMillis());
4 // add 10 seconds to the calendar object
5 cal.add(Calendar.SECOND, 10);
6 Intent intent = new Intent(v.getContext(), AboAlarmReceiver.class);
7 intent.putExtra("alarm_message", "Ein Alarm!");
8 PendingIntent sender = PendingIntent.getBroadcast(v.getContext(), 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
9
10 // Get the AlarmManager service
11 AlarmManager am = (AlarmManager) v.getContext().getSystemService(Context.ALARM_SERVICE);
12 am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

Und der BroadcastReceiver sieht wie folgt aus

1@Override
2 public void onReceive(Context context, Intent intent) {
3 try {
4 Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
5 v.vibrate(500);
6
7 NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
8
9 long when = System.currentTimeMillis();
10 Bundle bundle = intent.getExtras();
11 String message = bundle.getString("alarm_message");
12 Notification notification = new Notification(R.drawable.icon, message, when);
13 notification.flags |= Notification.FLAG_AUTO_CANCEL;
14 notification.number += 1;
15
16 Intent i = new Intent(context, HomeActivity.class);
17
18 PendingIntent activity = PendingIntent.getActivity(context, 0, i, 0);
19 notification.setLatestEventInfo(context, "Benachrichtigung", message, activity);
20
21 mNotificationManager.notify(0, notification);
22 } catch (Exception e) {
23 Log.e("Exception", e.getMessage());
24 e.printStackTrace();
25
26 }
27 }

Weiß hierzu vielleicht noch jemand Rat? Hab dazu leider bisher noch nicht wirklich was finden können, vor allem weil ich mir auch denke, dass es passieren kann das der GarbageCollector meine Nachricht auch einfach löschen kann wenn nötig, da ich doch auch beim RAM leeren nur den GarbageCollector selber anschmeiße was zu tun, oder irre ich hier?

Antworten
Florian B.
  • Forum-Beiträge: 284

17.02.2012, 13:10:56 via Website

Ja das Verhalten ist normal, ein Alarm ist nur so lange vorhanden, wie das Telefon nicht neu gestartet wird. Ich vermute mal, dass es dann beim leeren des Speichers nicht anders sein wird.

Für das Problem durch den Neustart des Handys gibt's eine Lösung. Und zwar macht das System einen Broadcast wenn das Handy neu gestartet wurde, für den musst du deine App registrieren und wenn du ihn bekommst, musst du wieder einen neuen Alarm eintragen. Dazu musst du dir natürlich vorher merken für welche Zeitpunkt der Alarm vorher gesetzt war. Am besten einfach in den SharePreferences der App ablegen.

Wichtig dabei ist noch, dass die App nur über den Neustart der App informiert wird, wenn die App auf dem internen Speicher installiert ist. Ist sie auf dem externen Speicher, dann ist dieser meist noch nicht gemountet wenn der Broadcast passiert und die App bekommt den Neustart nicht mit.

Hier kannst du dir das mal anschauen, da wird zwar ein Service nach dem Booten gestartet, aber das Hören auf den Broadcast ist das gleiche.

Wie du das Problem mit dem Leeren des Speichers lösen kannst, weiss ich allerdings gerade auch nicht.

Antworten