Notification mit AlarmManager anzeigen

  • 1 Antworten
  • Letztes Antwortdatum

Wie findest du den Codeschnipsel?

  • Nicht Hilfreich

    Stimmen: 0 0,0%
  • Code enthält Fehler

    Stimmen: 0 0,0%

  • Umfrageteilnehmer
    3
  • Umfrage geschlossen .
Jaiel

Jaiel

Dauer-User
235
Hallo,

ich zeig euch wie ich eine Notification absetze, die wenn man auf die Notification klickt eure App öffnet.

Folgende Schritte müssen gemacht werden:

-Eine Klasse anlegen die von BroadcastReceiver erbt und die Methode onReceive überschreiben

-In einer Activity eurer Wahl 2 Funktionen setAlarm(int seconds) und cancelAlarm() anlegen, die euren Alarm setzen oder löschen

-Im Android Manifest den Receiver eintragen

Ok hier erstmal der Code für den BroadcastReceiver:

Code:
package my.mypackage.myfolder;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v4.app.NotificationCompat;

public class MyBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        createNotification(context,"Title","Text","Tickertext");

    }


    public void createNotification(Context context,String contentTitle,
                                   String contentText,String tickerText)
    {
        Bitmap largeIcon=BitmapFactory.decodeResource(context.getResources(),
                                           R.drawable.ic_notification_large);

        PendingIntent pendingIntent=PendingIntent.getActivity(context,0,
                                    new Intent(context,MyEntryActivity.class),0);

        NotificationCompat.Builder notificationBuilder=
                new NotificationCompat.Builder(context)
                                      .setLargeIcon(largeIcon)
                                      .setSmallIcon(R.drawable.ic_notification_small)
                                      .setContentTitle(contentTitle)
                                      .setContentText(contentText)
                                      .setTicker(tickerText);

        notificationBuilder.setContentIntent(pendingIntent);
        notificationBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
        notificationBuilder.setAutoCancel(true);

        NotificationManager notificationManager=(NotificationManager)
                    context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1, notificationBuilder.build());
                                         
    }

}

Hier der Code für die Methoden in der Activity, mit denen ein Alarm gesetzt oder abgebrochen werden kann:

Code:
     final int ALARM_ID=1;
    public void setAlarmForNotification(int seconds)
    {
        long alarmTime=System.currentTimeMillis()+seconds*1000;
        Intent myBroadcastReceiverIntent=new Intent(this,MyBroadcastReceiver.class);
        AlarmManager alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC, alarmTime,PendingIntent.getBroadcast(this,
                     ALARM_ID,myBroadcastReceiverIntent,PendingIntent.FLAG_UPDATE_CURRENT));
    }

    public void cancelAlarmForNotification()
    {
        AlarmManager alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(PendingIntent.getBroadcast(this,ALARM_ID,
                            new Intent(this,MyBroadcastReceiver.class),
                            PendingIntent.FLAG_UPDATE_CURRENT));
    }

Ein Alarm der denselben PendingIntent hält wird sich immer wieder neu aktualisieren.

Und diese Zeilen müssen noch zwischen die <application> Tags geschrieben werden, sie erlauben euch den AlarmManager zu setzen und den Receiver anzumelden:

Code:
<receiver android:name=".MyBroadcastReceiver"/>
 
Zuletzt bearbeitet:
Mir fällt grad ein dass ich kein beispiel genannt habe oder was genau hiermit passieren wird:


ein Call zu
PHP:
setAlarmForNotification(60);
zum Beispiel setzt in 60 sekunden eine Notification ab egal ob die App geöffnet oder geschlossen ist. Falls ihr das Callt bevor ein gesetzter alarm ausgeführt wurde wird er aktualisiert und verschoben auf die neue Zeit

und ein call zu
PHP:
cancelAlarmForNotification();
bricht jeden noch ausstehenden alarm den ihr mit setAlarmForNotification() gesetzt habt ab.

Ich benutze das zum beispiel um den User zu informieren dass die app mal wieder geöffnet werden sollte. Dafür setze ich bei jedem öffnen der app in einer splash screen activity, die nur einmal besucht wird, den Alarm auf 86 400 sekunden also 24 stunden.
 

Ähnliche Themen

B
  • Beka1801
Antworten
3
Aufrufe
1.126
jogimuc
J
M
Antworten
2
Aufrufe
2.143
jogimuc
J
T
Antworten
3
Aufrufe
1.199
jogimuc
J
Zurück
Oben Unten