Example Extended Notification Test |
The example creates this notification
with an extensive range of functions. The app has a button for creating and deleting the notification:
Die Schaltflächen Create Notification (cmdCreate) und Remove Notification (cmdRemove) werden dem Anzeigezustand der Benachrichtigung entsprechend freigegeben.
Bei der Benachrichtigung sind vier Aktionen hinterlegt: Das Antippen der Benachrichtigung und drei Aktionsschaltflächen. Jede Aktion ist über einen Intent definiert.
In dem Projekt sind folgende Instanzen der Komponenten angelegt.
Typ | Name | Funktion | |
---|---|---|---|
UrsAI2NotificationChannel | Channel | Benachrichtigungskanal. | |
UrsNotification | Notification | Die eigentliche Benachrichtigung. | |
UrsNotification | NotificationDestroyed | Benachrichtigung, die nach dem Schließen der App angezeigt werden soll. | |
UrsIntent | IntentNone | Keine Aktion. | |
UrsIntent | IntentOpenUrs | Ullis Roboter Seite im Browser öffnen. Funktioniert auch bei geschlossener App. | |
UrsIntent | IntentRaiseEvent | Das Ereignis Notification.OnClick auslösen. Funktioniert nur solange die App geöffnet ist (Vordergrund oder Hintergrund). | |
UrsIntent | IntentScreenNotification | Den Screen Notification der App öffnen. Funktioniert auch bei geschlossener App. |
Das Auslösen des Ereignisses UrsNotification.OnClick funktioniert nicht, wenn der zugehörige Screen geschlossen ist. Nach dem Schließen des Screens (hier Screen1, also die App) soll die zugehörige Aktionsschaltfläche nicht mehr angezeigt werden. Leider erlaubt es der App Inventor nicht, das Activity.onDestroy-Ereignis an die App weiter zu geben. Diese hat also keine Möglichkeit, die Benachrichtigung entsprechend abzuändern. Deshalb wird über die Funktion UrsNotification.SetOnDestroyAction eine passende Benachrichtigung registriert, die angezeigt wird, wenn die App geschlossen wird. Zu beachten ist, dass die intern notwendig Objekte zum Zeitpunkt des Aufrufs dieser Funktion erstellt werden1). Wenn nachträglich Änderungen am übergebenen UrsNotificationObject oder UrsIntentObject vorgenommen werden sollen, muss die Funktion erneut aufgerufen werden. Ansonsten hätte die Änderung keine Wirkung.
1) Wenn die App aus der App-Übersicht (Historie) geschlossen wird, steht nur begrenzte Zeit und ein begrenzter Funktionsumfang zur Verfügung (Test mit Version Android Oreo, 8.1). Dieser reicht nicht aus, um die Objekte zum Zeitpunkt des Schließen zu erstellen.
Beim Initialisieren des Screens werden die Aktionsschaltflächen den Benachrichtigungsobjekten hinzugefügt. NotificationDestroyed erhält eine Schaltfläche weniger. Die rote Farbe der ersten Schaltfläche wird durch ein Hypertext-Tag erreicht.
Notification.SetOnDestroyAction legt fest, das beim Schließen der App die über NotificationDestroyed definierte Benachrichtigung angezeigt wird. NotificationDestroyed und Notification haben die gleiche ID (Feld NumberID). NotificationDestroyed wird Notification ersetzen. NotificationDestroyed würde auch dann angezeigt werden, wenn Notification nicht angezeigt wurde oder bereit gelöscht ist. Um das zu verhindern, wird SetOnDestroyAction erst dann aufgerufen, wenn die Notification wirklich angezeigt wird. Wenn erkannt wird, dass die Benachrichtigung gelöscht wurde, wird auch NotificationDestroyed wieder entfernt.
Die Schaltflächen Create Notification (cmdCreate) und Remove Notification (cmdRemove) werden dem Anzeigezustand der Benachrichtigung entsprechend freigegeben.
Zum Schluss wird das Benachrichtigungsfenster geöffnet, so dass man die erstellte Benachrichtigung direkt ansehen kann.
Die Schaltfläche cmdRemove löscht sowohl die angezeigte Benachrichtigung als auch die Benachrichtigung, die beim Schließen der App angezeigt werden soll.
Wenn der Anwender die Benachrichtigung löscht, muss auch die Benachrichtigung, die beim Schließen der App angezeigt werden soll, entfernt werden. Dass der Anwender die Nachricht gelöscht hat, wird auf der Benutzeroberfläche angezeigt.
Der Action-Button Raise Event löst das Ereignis OnClick aus.