+3 Punkte
in Android Tutorial von (106k Punkte)
wieder geöffnet
So erstellen Sie eine Benachrichtigungserinnerung unter Android

2 Antworten

+4 Punkte
von (710k Punkte)
Bearbeitet
 
Beste Antwort

Verwalten Sie Ihre Benachrichtigungen gut
Automatische Erinnerung an verpasste Benachrichtigungen

image

Wir erhalten täglich Dutzende von Benachrichtigungen. Unter diesen Bedingungen ist es schwierig, eine oder zwei wichtige Nachrichten nicht zu verpassen. Denken Sie daran, Benachrichtigungserinnerungen auf Ihrem Android-Smartphone einzurichten, um nichts zu verpassen..

Verwalten Sie Ihre Benachrichtigungen gut

Smartphones sind wunderbare Werkzeuge, um mit der Welt in Verbindung zu bleiben. Sobald ein Freund ein Foto auf Facebook kommentiert, einen Text verfasst oder einen Ihrer Witze retweetet, wird auf Ihrem Telefon ein kleines Popup angezeigt. Es ist sicherlich sehr praktisch, aber mit Gewalt riskieren Sie, von dieser unaufhörlichen Flut von Alarm überwältigt zu werden.

Offensichtlich ist es praktisch unmöglich, alle Informationen, die uns erreichen, sorgfältig zu überprüfen. Manchmal verpassen wir bestimmte wichtige Benachrichtigungen. Es ist daher erforderlich, eine wirksame Verwaltung der Meldungen einzurichten..

Beginnen Sie beispielsweise damit, den von Ihren verschiedenen Anwendungen ausgegebenen Ton zu trennen. Eine Benachrichtigung, die Sie über das Eintreffen einer SMS oder einen verpassten Anruf informiert, hat nicht die gleiche Bedeutung wie eine Benachrichtigung, die Sie über ein Facebook wie informiert. Zu wissen, dass Ihre Tati bei Ihrem letzten Beitrag über ein Bärenbaby etwas Ähnliches getan hat, ist es möglicherweise nicht wert, sich mitten in Ihrem Arbeitstreffen darum zu kümmern.

Automatische Erinnerung an verpasste Benachrichtigungen

Haben Sie jemals eine wichtige Benachrichtigung wie das Eintreffen einer E-Mail oder einer SMS verpasst? Wenn wir hören, wie das Smartphone nach einem Ja oder Nein klingelt, achten wir manchmal nicht darauf. Benachrichtigungen werden auf dem Sperrbildschirm übereinander gestapelt. Außerdem machen sich viele Benutzer nicht einmal mehr die Mühe, ihre Smartphones zu entsperren, um ihre Benachrichtigungen zu lesen..

Um keine SMS oder E-Mails zu verpassen , ist es am besten, eine automatische Erinnerung an verpasste Benachrichtigungen zu planen. Das Prinzip ähnelt dem von Kalendererinnerungen. Jedes Mal, wenn Sie eine wichtige Benachrichtigung erhalten, auf die Sie keine Antwort erhalten haben, klingelt Ihr Telefon, um Sie auf seine Anwesenheit aufmerksam zu machen.

Leider bietet Android diese Art von Funktionalität standardmäßig nur an. Sie müssen daher ein Tool aus dem Play Store herunterladen, um diese Aufgabe auszuführen. In diesem Tutorial haben wir die Erinnerung an verpasste Benachrichtigungen ausgewählt, die den Vorteil hat, Open Source zu sein.

  • Starten Sie den Google Play Store
  • Laden Sie die App Missed Notifications Reminder herunter
  • Ermöglichen Sie der App, auf Ihre Benachrichtigungen sowie auf den Speicherplatz zuzugreifen image
  • Wenn auf Ihrem Smartphone Android Marshmallow oder Nougat ausgeführt wird, müssen Sie auch die Erinnerung an verpasste Benachrichtigungen vom Doze-Batterieoptimierer ausschließen
  • Folgen Sie dazu einfach den auf dem Bildschirm angezeigten Informationen.
  • Im nächsten Schritt werden Sie aufgefordert, die Anwendungen auszuwählen, für die die Benachrichtigungen vom Erinnerungssystem profitieren sollen. image
  • Aktivieren Sie das entsprechende Kontrollkästchen und weisen Sie jeder Erinnerung ein Intervall zu image

Jetzt müssen Sie nur noch einen kleinen Test machen. Mit diesem System können Sie wichtige Warnungen nicht mehr verpassen. Ohne den Bildschirm Ihres Smartphones zu berühren, benachrichtigt Sie das Tool durch dringende Benachrichtigungen durch einen Piepton und eine Vibration.

Beachten Sie, dass die Erinnerung an verpasste Benachrichtigungen auch die Option bietet, einen Zeitraum zu definieren, in dem Sie keine Erinnerungen erhalten möchten. Dies kann sehr nützlich sein, insbesondere wenn Sie Nachrichten sehr spät erhalten. Es ist nie lustig, mitten in der Nacht durch Benachrichtigungserinnerungen geweckt zu werden.


+4 Punkte
von (79.5k Punkte)

Einstieg
Anzeigen Ihrer ersten Benachrichtigung
Mit Alarmen noch einen Schritt weiter gehen
5. Erstellen Sie einen BroadcastReceiver
Wohin von hier aus?
Erstellen Sie einen Benachrichtigungskanal
Registrieren Sie den Benachrichtigungskanal
Benachrichtigung erstellen
Benachrichtigung des Managers
Erstellen eines Alarms zum Senden einer Benachrichtigung

Anleitung zu Android-Benachrichtigungen: Erste Schritte

In diesem Android-Benachrichtigungs-Tutorial erfahren Sie, wie Sie eine App erstellen, mit der Sie Erinnerungen zu verschiedenen Zeitplänen einrichten können.

Ausführung

  • Kotlin 1.3, Android 8.1, Android Studio 3

In diesem Tutorial werden Sie Benachrichtigungen ausgeben , um sich daran zu erinnern, sich um Ihre Liebsten zu kümmern: Ihre Haustiere .

Benachrichtigungen sind eine praktische Möglichkeit, Ihrer Anwendung Funktionen und Funktionen hinzuzufügen, ohne dass Ihre Benutzer direkt mit ihnen interagieren. Sie können beispielsweise verwendet werden, um einer Musik-App Wiedergabesteuerungen hinzuzufügen, schnelle Aktionen zum Beantworten von SMS oder E-Mails bereitzustellen und unter anderem über Eilmeldungen zu informieren.

Sie arbeiten mit den Benachrichtigungs-APIs, um Benachrichtigungen mit dem NotificationManager auszugeben , Alarme mit dem AlarmManager zu planen und sie durch die Verwendung von Gruppen , Kanälen und Aktionen zu verbessern .

Hinweis: Dieses Tutorial setzt voraus, dass Sie über Grundkenntnisse von Kotlin und Android verfügen. Wenn Sie neu bei Android sind, sehen Sie sich unsere Android-Tutorials an . Wenn Sie Android kennen, aber mit Kotlin nicht vertraut sind, werfen Sie einen Blick auf Kotlin für Android: Eine Einführung . Ich gehe auch davon aus, dass Sie über Kenntnisse der Kompatibilitätsbibliotheken verfügen, um die Funktionalität auf eine ältere Version des Betriebssystems zurück zu portieren.

Einstieg

Laden Sie zunächst die Projektmaterialien herunter, indem Sie die Schaltfläche Materialien herunterladen oben oder unten in diesem Tutorial verwenden. Entpacken Sie den Inhalt in einen Ordner und merken Sie sich den Speicherort. Öffnen Sie Android Studio und wählen Sie auf der Begrüßungsseite Open an existing Android Studio Project , navigieren Sie zum kürzlich heruntergeladenen Ordner und wählen Sie PetMedicineReminder-Starter .

Nachdem das Starterprojekt geladen und erstellt wurde, führen Sie die Anwendung auf einem Gerät oder Emulator aus.

Sobald die App ausgeführt wird, laden Sie die Beispieldaten, indem Sie das Überlaufsymbol oben rechts auswählen und auf Beispieldaten laden tippen . Wenn die Daten geladen werden, sollten Sie eine Liste mit Erinnerungen sehen, um einigen Haustieren Medikamente zu verabreichen.

Android-Benachrichtigungen

Nicht besonders aufregend, aber hier wird Ihre erste Benachrichtigung angezeigt.

Anzeigen Ihrer ersten Benachrichtigung

Um eine Benachrichtigung anzuzeigen, müssen Sie einige Einrichtungsarbeiten durchführen. Du wirst brauchen:

  1. Erstellen Sie einen Benachrichtigungskanal.
  2. Registrieren Sie den Benachrichtigungskanal.
  3. Erstellen Sie eine Benachrichtigung.
  4. Senden Sie eine Benachrichtigung mit NotificationManager .

Erstellen Sie einen Benachrichtigungskanal

Benachrichtigungskanäle bieten eine gemeinsame visuelle und auditive Erfahrung für Benachrichtigungen eines ähnlichen Typs. Seit ihrer Einführung in API 26 müssen Sie jetzt einen Kanal für eine Benachrichtigung festlegen, da sie sonst auf neueren Android-Versionen nicht angezeigt werden.

Öffnen Sie die Datei NotificationHelper.kt im Verzeichnis notif und fügen Sie der createNotificationChannel()Methode den folgenden Code hinzu :

fun  createNotificationChannel (context: Context , Important: Int , showBadge: Boolean , name: String , description: String ) {
   // 1 
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    // 2 
    val channelId = " ${context.packageName} - $name " 
    val channel = NotificationChannel(channelId, name, Wichtigkeit)
    channel.description = Beschreibung
    channel.setShowBadge(showBadge)

    // 3 
    val notificationManager = context.getSystemService(NotificationManager:: class .java)
    notificationManager.createNotificationChannel(Kanal)
  }
}

Hier Sie:

  1. Safety hat die Betriebssystemversion auf API 26 und höher überprüft.
  2. Einen eindeutigen Namen für den Benachrichtigungskanal erstellt. Name und Beschreibung werden in den Benachrichtigungseinstellungen der Anwendung angezeigt.
  3. Den Kanal mit dem NotificationManager erstellt.

Gute Arbeit! Jetzt müssen Sie diese Methode aufrufen.

Registrieren Sie den Benachrichtigungskanal

Öffnen Sie die Anwendungsdatei PetRx.kt unter dem Root-Paket und fügen Sie der onCreate()Methode den folgenden Code hinzu :

NotificationHelper. createNotificationChannel ( this ,
    NotificationManagerCompat.IMPORTANCE_DEFAULT, false ,
     getString (R.string.app_name), "App-Benachrichtigungskanal." )

Nachdem der Kanal jetzt erstellt wurde, können Sie ihm eine Benachrichtigung senden, wenn die Beispieldaten geladen werden.

Benachrichtigung erstellen

Öffnen Sie die Datei NotificationHelper.kt und navigieren Sie zu createSampleDataNotification(). Fügen Sie den folgenden Code hinzu:

// 1 
val channelId = " ${context.packageName} - ${context.getString(R.string.app_name)} " 
// 2 
val notificationBuilder = NotificationCompat.Builder(context, channelId).apply {
  setSmallIcon(R.drawable.ic_stat_medicine) // 3 
  setContentTitle(title) // 4 
  setContentText(message) // 5 
  setStyle(NotificationCompat.BigTextStyle().bigText(bigText)) // 6 
  Priority = NotificationCompat.PRIORITY_DEFAULT // 7 
  setAutoCancel (autoAbbrechen) // 8
}

Hier Sie:

  1. Erstellen Sie das Unique channelIdfür diese App mithilfe des Paketnamens und des App-Namens.
  2. Verwenden Sie NotificationCompat.Builder, um mit dem Erstellen der Benachrichtigung zu beginnen.
  3. Legen Sie ein kleines Symbol fest, das im Benachrichtigungsschirm angezeigt werden soll. Dies ist das einzige erforderliche Attribut.
  4. Legen Sie einen Titel für die Benachrichtigung fest.
  5. Legen Sie den Inhalt für die Benachrichtigung fest.
  6. Legen Sie den Stil des Benachrichtigungsstils auf fest NotificationCompat.BigTextStyle().
  7. Legen Sie die Benachrichtigungspriorität auf die Standardpriorität fest. Priorität gibt an, wie viel Aufmerksamkeit des Benutzers die Benachrichtigung auf sich ziehen soll. Sie werden später andere Verwendungen sehen, aber akzeptable Werte sind:
    • PRIORITY_MIN
    • PRIORTY_MAX
    • PRIORITY_LOW
    • PRIORTY_HIGH
    • PRIORITY_DEFAULT
  8. Stellen Sie die Benachrichtigung auf automatisches Abbrechen ein, wenn Sie darauf tippen.

Ausstehende Absichten

Bisher haben Sie den Benachrichtigungskanal erstellt und mit dem Erstellen einer Benachrichtigung begonnen, möchten den Benutzer jedoch irgendwohin leiten, wenn er auf die Benachrichtigung tippt. Dies erfordert das Hinzufügen eines PendingIntentzum Benachrichtigungsaufruf setContentIntentbeim Erstellen der Benachrichtigung. Ein PendingIntent wird grob als eine Aktion beschrieben, die zu einem späteren Zeitpunkt ausgeführt werden soll.

Fügen Sie der createSampleDataNotification()Methode innerhalb des applyLambda direkt nach die folgenden Zeilen hinzu setAutoCancel(autoCancel):

// 1 
val Intent = Intent(context, MainActivity:: class .java)
Intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK oder Intent.FLAG_ACTIVITY_CLEAR_TASK
// 2 
val pendingIntent = PendingIntent.getActivity(context, 0 , Intent, 0 )
 // 3
setContentIntent(pendingIntent)

Hier Sie:

  1. Erstellt eine Intent, um die MainActivity.
  2. Wrapped the Intentin a PendingIntent, erstellt durch die getActivity()Methode, die eine Beschreibung eines Activityzu startenden angibt.
  3. Wird aufgerufen setContentIntent(), um es an die NotificationCompat.Builder.

Benachrichtigung des Managers

Der letzte Schritt zum Ausgeben einer Benachrichtigung ist das Abrufen eines Verweises auf den NotificationManagerCompat- Systemdienst und das Aufrufen von notify().

Fügen Sie nach dem applyLambda den folgenden Code hinzu :

// 1 
Wert notificationManager = NotificationManagerCompat. from (context)
 // 2 
notificationManager.notify( 1001 , notificationBuilder.build())

Hier Sie:

  1. Verwendet die App Context, um einen Verweis auf zu erhalten NotificationManagerCompat.
  2. Aufgerufen notify()bei der NotificationManagerÜbergabe einer Kennung und der Benachrichtigung.

Führen Sie die Anwendung erneut aus, löschen Sie die Daten aus dem Menü Delete Data und laden Sie sie erneut aus dem Menü Load sample data item. Wenn alles erfolgreich war, sollten Sie jetzt ein Benachrichtigungssymbol in der Statusleiste sehen! Ziehen Sie den Benachrichtigungsschirm herunter und Sie sehen die vollständige Benachrichtigung Ihrer Anwendung, die anzeigt, dass Ihre Beispieldaten geladen wurden. Groß!

Mit Alarmen noch einen Schritt weiter gehen

Es ist cool, eine Benachrichtigung auszugeben, nachdem eine Aktion ausgeführt wurde, aber Sie erstellen eine Erinnerungsanwendung, um Ihren Haustieren Medikamente nach einem Zeitplan zu verabreichen . Dies erfordert, dass Sie die Benachrichtigungen zu einem späteren Zeitpunkt ausgeben. Der AlarmManagerSystemdienst ermöglicht Ihnen genau das. Beachten Sie, dass jedes Element in der Erinnerungsliste die Tage und die Uhrzeit für die Verabreichung des Arzneimittels enthält. Sie werden diese Informationen verwenden, um die Alarme im nächsten Abschnitt zu planen.

Erstellen eines Alarms zum Senden einer Benachrichtigung

Um einen Alarm zum Auslösen einer Benachrichtigung zu erstellen, müssen Sie Folgendes tun:

  1. Erstellen Sie Benachrichtigungskanäle für jeden Haustiertyp.
  2. Bestimmen Sie die Uhrzeit und das Datum, um den Alarm zu planen.
  3. Erstellen Sie eine PendingIntent, um sie dem Alarm hinzuzufügen.
  4. Planen Sie es mit der AlarmManager.
  5. Registrieren Sie a BroadcastReceiver, um auf den Alarm zu hören.
  6. Erstellen Sie die Benachrichtigung und geben Sie sie aus.

1. Haustiertyp-Benachrichtigungskanäle

Da Sie bereits Erfahrung mit dem Erstellen von Benachrichtigungskanälen haben, kopieren Sie einfach diesen Code und fügen Sie ihn in die onCreate()Methode der Anwendungsklasse ein PetRx.kt.

// 1 
NotificationHelper.createNotificationChannel( this ,
    NotificationManagerCompat.IMPORTANCE_LOW, true ,
    ReminderData.PetType.Cat.name, "Benachrichtigungskanal für Katzen." )
 // 2 
NotificationHelper.createNotificationChannel( this ,
    NotificationManagerCompat.IMPORTANCE_HIGH, true ,
    ReminderData.PetType.Dog.name, "Benachrichtigungskanal für Hunde." )
 // 3 
NotificationHelper.createNotificationChannel( this ,
    NotificationManagerCompat.IMPORTANCE_NONE, false ,
    ReminderData.PetType.Other.name, "Benachrichtigungskanal für andere Haustiere." )

Beachten Sie, dass Sie für jeden Kanal eine andere Wichtigkeitsstufe angeben . Beim Erstellen von Kanälen sollten Sie sorgfältig über die Benutzererfahrung nachdenken, die Sie erstellen.

Kanäle & Bedeutung

  1. Katzen: NotificationManagerCompat.IMPORTANCE_LOW– Geringe Bedeutung der Benachrichtigung: wird überall angezeigt, ist aber nicht aufdringlich.
  2. Hunde: NotificationManagerCompat.IMPORTANCE_HIGH– Höhere Benachrichtigungswichtigkeit: zeigt überall, darf lärmen und gucken.
  3. Sonstiges: NotificationManagerCompat.IMPORTANCE_NONE– Eine Benachrichtigung ohne Bedeutung: wird nirgendwo angezeigt, ist blockiert.

Da die Anwendung mehrere Haustiertypen unterstützt und Sie organisiert bleiben möchten, ist es wichtig, für jeden unterschiedlichen Haustiertyp einen Kanal hinzuzufügen. Auf diese Weise können Ihre Benutzer ein bestimmtes Verhalten basierend auf dem Typ dieses Haustiers konfigurieren und sie individuell über die App-Einstellungen des Geräts steuern.

Öffnen Sie das Überlaufmenü und tippen Sie auf Kanäle verwalten , um die registrierten Kanäle für Ihre Anwendung anzuzeigen.

2. Alarmzeit

Die Beispiel-App enthält ein Modell namens ReminderData. Jedes ReminderData-Objekt enthält sowohl eine Uhrzeit als auch eine Liste von Tagen . Wenn der Benutzer die Erinnerung erstellt, werden diese Informationen eingegeben und in einer lokalen Datenbank gespeichert. Sie verwenden die Erinnerungsdaten, wenn Sie mit dem arbeiten AlarmManager, um einen Alarm zu erstellen. Dazu gleich mehr.

3. Erstellen der PendingIntent

Öffnen Sie die AlarmScheduler.ktDatei unter dem Notif- Paket und navigieren Sie zur createPendingIntent(): PendingIntent?Methode.

Fügen Sie den folgenden Code hinzu:

// 1 
val Intent = Intent(context.applicationContext, AlarmReceiver:: class .java).apply {
   // 2
  action = context.getString(R.string.action_notify_administer_medication)
  // 3 
  type = " $day - ${reminderData.name} - ${reminderData.medicine} - ${reminderData.type.name} " 
  // 4
  putExtra(ErinnerungsDialog.KEY_ID,erinnerungsData.id)
}
// 5 
return PendingIntent.getBroadcast(context, 0 , Intent, PendingIntent.FLAG_UPDATE_CURRENT)

Hier Sie:

  1. Erstellen Sie die Intentmit einem Ziel von AlarmReceiver::class.java(diese Klasse sollte bereits vorhanden sein, aber Sie werden sie im nächsten Abschnitt ausfüllen).
  2. Legen Sie die Aktion für die Intent.
  3. Legen Sie den Typ fest – Dieser muss eindeutig sein, damit Sie ihn anhand des Tages, des Namens des Haustiers, der Medizin und des Haustiertyps erstellen. Wenn dies nicht eindeutig ist, werden alle anderen PendingIntentmit demselben Typ überschrieben . Wenn Sie interessiert sind, können Sie mehr darüber lesen, wie zwei Intents als gleich angesehen werden .
  4. Fügen Sie die ID der Erinnerung zum Paket hinzu Intent, damit Sie sie in der verwenden können AlarmReceiver.
  5. Erstellen Sie die PendingIntentmit der getBroadcast()Methode. Dies ist sehr wichtig, da Sie die Intentmit a BroadcastReceiverals Ziel erstellen .

4. Planen des Alarms

Nachdem die Benachrichtigungskanäle eingerichtet sind und Sie PendingIntentfür jede Erinnerung einen eigenen erstellt haben , ist es an der Zeit, die Wecker zu planen.

Öffnen Sie die Datei AlarmScheduler.kt und suchen Sie die scheduleAlarm()Methode.
Fügen Sie den folgenden Code hinzu:

// 1 
val datetimeToAlarm = Calendar.getInstance (Locale.getDefault ())
datetimeToAlarm.timeInMillis = System.currentTimeMillis()
datetimeToAlarm. set (HOUR_OF_DAY, erinnerungsdaten.stunde)
datetimeToAlarm. einstellen (MINUTE, ErinnerungDaten.Minute)
datetimeToAlarm. setzen (SECOND, 0 )
datetimeToAlarm. setzen (MILLISEKUNDE, 0 )
datetimeToAlarm. set (DAY_OF_WEEK, dayOfWeek)
 // 2 
val today = Calendar.getInstance(Locale.getDefault())
 if (shouldNotifyToday(dayOfWeek, today, datetimeToAlarm)) {
  alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
      datetimeToAlarm.timeInMillis, ( 1000 * 60 * 60 * 24 * 7 ).toLong(), alarmIntent)
   return
}
// 3 
datetimeToAlarm.roll(WEEK_OF_YEAR, 1 )
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
    datetimeToAlarm.timeInMillis, ( 1000 * 60 * 60 * 24 * 7 ).toLong(), alarmIntent)

Du hast gerade drei wichtige Dinge getan:

  1. Richten Sie Calendarmit den ReminderData eine für die Uhrzeit des Weckers ein.
  2. Überprüft, ob dieser Alarm heute geplant werden soll und wenn ja, geplant.
  3. Andernfalls planen Sie den Wecker so, dass er zu dieser Zeit jede Woche wiederholt wird.

5. Erstellen Sie einen BroadcastReceiver

Beim Umgang mit Alarmen sind nur noch ein paar Dinge zu beachten, aber wie binden sie an die Benachrichtigungen zurück? Nun, die Instanzen, in denen PendingIntentSie sich über registriert haben, AlarmManagerwurden mit der PendingIntent.getBroadcast()Methode erstellt. Mit dieser Methode können Sie einen Broadcast an das System senden, der alle Listener über die Aktion benachrichtigt, die Sie für die Intent.

Öffnen Sie eine Datei namens AlarmReceiver im Notif- Paket. Stellen Sie sicher, dass sie von der BroadcastReceiver()Basisklasse erbt und implementieren Sie die onReceive()Methode.

if (context != null && intention != null && intention.action != null ) {
   // 1 
  if (intent.action!!. equals (context.getString(R. string .action_notify_administer_medication), ignoreCase = true )) {
     if (intent.extras != null ) {
      // 2
      Werterinnerungsdaten = DataUtils.getReminderById(intent.extras!!.getInt(ReminderDialog.KEY_ID))
      if (reminderData != null ) {
         // 3
        NotificationHelper.createNotificationForPet (Kontext, Erinnerungsdaten)
      }
    }
  }
}

Mit diesem Code können Sie:

  1. Überprüfen Sie, ob die Aktion des Intents mit der Aktion des oben erstellten Intents übereinstimmt.
  2. Habe das ReminderDatain der Datenbank mit dem Extra aus dem Intent's Bundle nachgeschlagen.
  3. Erstellen Sie die Benachrichtigung mit den ReminderData.

Öffnen AndroidManifest.xml und registrieren Sie den AlarmReceiver, indem Sie diese XML in das Anwendungs- Tag einfügen :

   < empfänger  android:name = ".notif.AlarmReceiver" />

Alles klar, Sie haben es endlich bis zum letzten Schritt geschafft! Jetzt geben Sie die Benachrichtigung für die Medikamente des Tieres aus.

6. Benachrichtigung erstellen und ausgeben

Öffnen Sie die NotificationHelperKlasse noch einmal, navigieren Sie zur createNotificationForPet()Methode und fügen Sie den folgenden Code hinzu:

// 1 
val groupBuilder = buildGroupNotification(context,minderData)
 // 2 
val notificationBuilder = buildNotificationForPet(context,erinnerData)
 // 3 
val administratorPendingIntent = createPendingIntentForAction(context,remorialData)
notificationBuilder.addAction(
  R.drawable.baseline_done_black_24, 
  context.getString(R.string.administer), 
  verwaltenPendingIntent)
// 4 
val notificationManager = NotificationManagerCompat.from(context)
notificationManager.notify(reminderData.type.ordinal, groupBuilder.build())
notificationManager.notify(reminderData.id, notificationBuilder.build())

Hier Sie:

  1. Erstellen Sie eine Gruppenbenachrichtigung.
  2. Erstellen Sie eine Benachrichtigung für das Haustier.
  3. Fügen Sie der Benachrichtigung für das Haustier eine Aktion hinzu.
  4. Wird NotificationManagerfür beide Benachrichtigungen mit benachrichtigen aufgerufen .

1. Erstellen Sie eine Gruppenbenachrichtigung

Gruppenbenachrichtigungen helfen Ihnen zusammen mit Kanälen, organisiert zu bleiben , da mehr Benachrichtigungen in Ihre Anwendungen eingefügt werden. Sie helfen, die von Ihrer App- Gruppe ausgegebenen Benachrichtigungen im Benachrichtigungsschatten zusammenzufassen . Da die Beispiel-App Erinnerungen für Katzen, Hunde und andere Haustiere unterstützt, haben Sie bereits die Gruppen, die Sie für den Einstieg benötigen.

Ändern Sie die buildGroupNotification(context: Context, reminderData: ReminderData)Methode wie folgt:

privater  Spaß  buildGroupNotification (context: Context , reminderData: ReminderData ) : NotificationCompat.Builder {
   // 1 
  val channelId = " ${context.packageName} - ${reminderData.type.name} " 
  return NotificationCompat.Builder(context, channelId). anwenden {
    setSmallIcon(R.drawable.ic_stat_medicine)
    setContentTitle(reminderData.type.name)
    setContentText(context.getString(R.string.group_notification_for,erinnerungsData.type.name))
    setStyle(NotificationCompat.BigTextStyle()
        .bigText(context.getString(R.string.group_notification_for,erinnerungsData.type.name)))
    setAutoCancel( true )
    setGroupSummary( true ) // 2 
    setGroup(reminderData.type.name) // 3
  }
}
  1. channelIdErstellen Sie mit derselben die Gruppenbenachrichtigung.
  2. Legen Sie diese Benachrichtigung als Gruppenzusammenfassung fest (nützlich für Android-Versionen vor API 24 ).
  3. Stellen Sie die Gruppe auf den Namen des Haustiertyps ein (dh Katze, Hund oder Andere).

2. Erstellen Sie eine Benachrichtigung

Als Nächstes müssen Sie die Benachrichtigung mit derselben erstellen channelId. Dieses Mal fügen Sie der Benachrichtigung auch ein großes Symbol hinzu, um sie von den anderen Haustiertypen zu unterscheiden.

Navigieren Sie zur buildNotificationForPet(context: Context, reminderData: ReminderData)Methode und ändern Sie sie wie folgt:

privater  Spaß  buildNotificationForPet (context: Context , reminderData: ReminderData ) : NotificationCompat.Builder {
   // 1 
  val channelId = " ${context.packageName} - ${reminderData.type.name} " 
  return NotificationCompat.Builder(context, channelId). anwenden {
    setSmallIcon(R.drawable.ic_stat_medicine)
    setContentTitle(reminderData.name)
    setAutoCancel( true )
     // 2 
    val drawable = when (reminderData.type) {
      ReminderData.PetType.Dog -> R.drawable.dog
      ReminderData.PetType.Cat -> R.drawable.cat
      sonst -> R.drawable.other
    }
    // 3
    setLargeIcon(BitmapFactory.decodeResource(context.resources, drawable))
    setContentText( " ${reminderData.medicine} , ${reminderData.desc} " )
     // 4
    setGroup(reminderData.type.name)
    if (reminderData.note != null ) {
      setStyle(NotificationCompat.BigTextStyle().bigText(reminderData.note))
    }
    val Intent = Intent(context, MainActivity:: class .java).apply {
      flags = Intent.FLAG_ACTIVITY_NEW_TASK oder Intent.FLAG_ACTIVITY_CLEAR_TASK
      putExtra(ErinnerungsDialog.KEY_ID,erinnerungsData.id)
    }
    val pendingIntent = PendingIntent.getActivity(context, 0 , Intent, 0 )
    setContentIntent(pendingIntent)
  }
}
  1. Erstellen Sie die Benachrichtigung mit derselben ChannelId wie die Gruppenbenachrichtigung.
  2. Verwenden ReminderDataSie zum Abrufen einer zeichnerischen Referenz für das große Symbol.
  3. Wenden Sie das große Symbol auf die Benachrichtigung an.
  4. Legen Sie die Gruppe der Benachrichtigung fest.

3. Fügen Sie der Benachrichtigung eine Aktion hinzu

Aktionen ermöglichen einen schnellen Zugriff auf Funktionen, die nicht unbedingt auf die In-App-Erfahrung beschränkt sind. Angenommen, Sie erhalten eine Benachrichtigung von Ihrem E-Mail-Client und möchten diese entweder beantworten oder die E-Mail archivieren. Aktionen können dieses Verhalten bereitstellen.

Navigieren Sie zu createPendingIntentForAction()NotificationHelper und fügen Sie den folgenden Code hinzu:

// 1 
val administratorIntent = Intent(context, AppGlobalReceiver:: class .java).apply {
  action = context.getString(R.string.action_medicine_administered)
  putExtra(AppGlobalReceiver.NOTIFICATION_ID, ErinnerungData.id)
  putExtra(ErinnerungsDialog.KEY_ID,erinnerungsData.id)
  putExtra(ReminderDialog.KEY_ADMINISTERED, true )
}
// 2 
return PendingIntent.getBroadcast(context, ADMINISTER_REQUEST_CODE, administratorIntent, PendingIntent.FLAG_UPDATE_CURRENT)
  1. Erstellen Sie eine Absicht zum Starten der AppGlobalReceiver
  2. Wrap the Intent in eine PendingIntent

Hinweis: Das AppGlobalReceiverwurde AndroidManifest.xmlfür Sie erstellt und in der registriert .

Erstellen Sie schließlich die Anwendung und führen Sie sie erneut aus , um dies alles in Aktion zu sehen. Wenn die App ausgeführt wird, löschen Sie die Beispieldaten und laden Sie sie erneut, und die Alarme werden im Hintergrund geplant. Wenn die Benachrichtigungen angezeigt werden, sollten Sie sehen, dass sie gruppiert sind und eine Aktion haben, um das Arzneimittel wie verabreicht zu aktualisieren.

Hinweis : Der Verlauf der Benachrichtigungsgruppierung, dargestellt im Zeitverlauf.

Beeindruckend! Schau dir an, du gehst. Jetzt haben Sie eine voll funktionsfähige Anwendung, die Sie daran erinnert, Ihren Haustieren Medikamente zu verabreichen.

Wohin von hier aus?

Wenn Sie Probleme beim Abschließen des Tutorials hatten, ist das endgültige Projekt im Original-Download im Ordner PetMedicineReminder-Finished verfügbar . Laden Sie es mit der Schaltfläche Materialien herunterladen oben oder unten in diesem Tutorial herunter . Für einige zusätzliche Funktionen in der Anwendung stöbern Sie bitte im Quellcode.

In diesem Tutorial haben Sie gelernt, wie Sie Benachrichtigungen, Benachrichtigungskanäle und Benachrichtigungsgruppen erstellen und deren Anzeige und Verhalten anpassen. Sie haben gelernt, wie Sie Benachrichtigungen Aktionen hinzufügen und mit dem arbeiten, AlarmManagerum die Anzeige von Benachrichtigungen in der Zukunft zu planen. Sie haben auch einen kurzen Blick in die BroadcastReceiver.


...