Mechanizm powiadomień

Podobne dokumenty
Powiadomienia w systemie Android

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

[Android] Podstawy programowania

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University.

Systemy operacyjne na platformach mobilnych

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Tworzenie dialogów i wykorzystanie klasy Toast

Mechanizm zapisu preferencji

Laboratorium Systemów Mobilnych. Wykład 1

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Wykorzystanie plików

Obsługa SMS i telefonii

Android pierwsza aplikacja

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Podstawowe elementy GUI - zadania

Fragmenty są wspierane od Androida 1.6

Systemy operacyjne na platformach mobilnych

Systemy operacyjne na platformach mobilnych

Laboratorium Systemów Mobilnych. Wykład 2

Systemy operacyjne na platformach mobilnych

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

Podstawowe elementy GUI - zadania

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Wsparcie dla różnych urządzeń. SDK pozwala przystosować aplikację do większości tych wypadków

akademia androida Http i AsyncTask część VII

akademia androida Intencje oraz URI część III

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Android, wprowadzenie do SDK

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

akademia androida Składowanie danych część VI

Zaawansowane aplikacje WWW - laboratorium

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Mariusz Fraś. Instytut Informatyki. olitechnika Wrocławska. Systemy Wbudowane. Android. Dr inż. Mariusz Fraś. maf 1

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz

Mobilne aplikacje multimedialne

Zaawansowane programowanie UI na platformie Android

Layouty. Kilka layoutów

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Instalujemy środowisko. Hello World! Odczyt/zapis informacji do komponentów na formie. onclick()

I. Usługi. Usługa może przyjąć dwie formy:

instrukcja obsługi RXCamView

Laboratorium 10 - Web Services

akademia androida Sensory część V Mobile Applications Developers

Zasilanie ednet.power

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

JAVA : TELEFONY KOMÓRKOWE I ANDROID 1. WSTĘP

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

SYSTEM ZARZĄDZANIA RELACJAMI Z KLIENTEM CRM7

Laboratorium - Funkcje urządzeń mobilnych - Android oraz ios

Każde menu jest połączone z modułem, którym zarządza się w menedżerze modułów. Cztery dostępne menu widać na pasku Menu (rysunek 4.38).

Dlaczego Android? Uczę się Javy więc piszę.. w Androidzie. Nie mam telefonu z Androidem!

Programowanie obiektowe

Android poradnik programisty

Wykorzystanie map i geolokalizacji

I. Spis treści I. Spis treści... 2 II. Kreator szablonów Tworzenie szablonu Menu... 4 a. Opis ikon Dodanie nowego elementu...

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Instrukcja aktualizacji Mu-so

I. Program II. Opis głównych funkcji programu... 19

WSTĘP DO ANDROIDA. Laboratorium

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Poniżej przedstawiamy 15 najważniejszych naszym zdaniem nowości, na które warto zwrócić uwagę podczas korzystania z Nougata.

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Podstawowe kontrolki i ich obsługa

INSTRUKCJA UŻYTKOWNIKA

WSTĘP DO ANDROIDA. Laboratorium 1 Systemy i aplikacje bez granic

Dell UltraSharp UP3017 Dell Display Manager Instrukcja użytkownika

Zegarek należy ładować co najmniej 2 godziny przed pierwszym użyciem.

Dell Display Manager podręcznik użytkownika

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Henryk Budzisz. materiały przygotowane w ramach projektu ZPORR nr POKL /08-00

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

1 Warta Mobile Manual

Składanie zleceń z NOLa. Klient może złożyć zlecenie nie tylko z poziomu r-brokera, ale również z poziomu aplikacji Notowania OnLine (NOL).

wersja 1.0 ośrodek komputerowy uj cm ul. mikołaja kopernika 7e, Kraków tel

Programowanie telefonów z Windows Phone 7, cz. 4

Backend Administratora

Automatyczne testowanie aplikacji Android

1 Warta Mobile Manual

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Aplikacje internetowe i rozproszone - laboratorium

Motorola. Defy E365. Modele Defy E365 GLEAM GLEAM+ MOTOKRZR K1 MOTOLUXE MOTORAZR2 V8 V3 V3i V80. Wiadomości Tu i Teraz. Ustawienie.

Tworzenie i wykorzystanie usług

Instrukcja obsługi. Zewnętrzny panel videodomofonowy IP. Konfiguracja i obsługa aplikacji DMSS Plus.

Formy dialogowe w środowisku Gnome

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński

Ćwiczenia 9 - Swing - część 1

Instrukcja korzystania z aplikacji mobilnej mtoken Asseco MAA. Przewodnik dla użytkownika

Wspólne Zaawansowana tabela

PRZEWODNIK PO ETRADER ROZDZIAŁ XII. ALERTY SPIS TREŚCI

Java: interfejsy i klasy wewnętrzne

Przewodnik dla użytkownika. Instrukcja korzystania z aplikacji mobilnej mtoken Asseco MAA

Transkrypt:

Mechanizm powiadomień

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University. Portions of this page are reproduced from work created and shared by Google and used according to terms

Powiadomienia Czym jest powiadomienie? Powiadomienie to krótka wiadomość wyświetlana poza widokiem danej aplikacji (np. na pasku statusu). Zazwyczaj sugeruje to zajście interesującego (z punktu widzenia) użytkownika zdarzenia (np. alarm czy wiadomość) Użytkownik może kliknąć w powiadomienie by otworzyć daną aplikację, bądź wykonać akcję bezpośrednio z poziomu powiadomienia. Notyfikacje występują w różnych formach jako ikona na pasku statusu, szczegółowa wiadomość w panelu notyfikacji, czy odznaka na ikonie aplikacji. 2

Różne miejsca powiadomień Powiadomienia Powiadomienie na pasku statusu Przeciągnij Powiadomienie na ekranie blokady Przejrzyj rozszerzone informacje Odznaka na ikonie aplikacji Powiadomienie heads-up Źródło: https://developer.android.com

Powiadomienia Notification Manager Ta klasa powiadamia użytkownika o zachodzących zdarzeniach (najczęściej w tle). Powiadomienia mogą przyjmować różną formę: 1. Ikony która pojawia się w pasku statusu (kiedy użytkownik w nią kliknie, określona intencja zostanie wysłana), 2. Włączenie lub miganie diodą LED urządzenia 3. Zwrócenie uwagi użytkownika przez miganie podświetleniem ekranu, odtworzenie dźwięku, lub wykorzystanie wibracji. 4

Powiadomienia - układ Powiadomienie składa się z: 1. Mała ikona (wymagane): Ustawiane przy pomocy setsmallicon(). 2. Nazwa aplikacji: Zapewniane przez system. 3. Czas: Zapewniane przez system, ale można zmienić przez setwhen() lub ukryć wykorzystując setshowwhen(false). 4. Wielka ikona: Element opcjonalny (często stosowany dla ikony kontaktu) ustawiany przez setlargeicon(). 5. Tytuł: Ustawiane przez setcontenttitle(). 6. Tekst: Ustawiane przez setcontenttext(). Źródło: https://developer.android.com

Powiadomienia - akcje Domyślnie, tekst powiadomienia jest przycinany by zmieścił się w jednej linii. Można jednakże zastosować inny szablon dla powiadomienia, który sprawi, że będzie je można rozwinąć i zawrzeć w nim zdecydowanie więcej tekstu. Powiadomienia mogą mieć dodatkowe przyciski do realizacji zadań. Choć nie jest to wymagane, kliknięcie powiadomienia powinno otwierać powiązaną z nim aplikację. Źródło: https://developer.android.com

Powiadomienia - grupowanie Powiadomienia nie powinny być nachalne dla użytkownika. Zamiast tworzyć nowe powiadomienie często wystarczy zaktualizować tekst starego. Jeżeli konieczne jest stworzenie wielu powiadomień, dobrze jest je zgrupować (dostępne od Androida 7.0). Grupa prezentowana jest jako jedno powiadomienie, które można rozwinąć. Źródło: https://developer.android.com

Powiadomienia - kanały Android 8.0 wprowadza kanały powiadomień (ang. notification channels). Powiadomienie bez przypisanego kanału nie będzie pokazywane. Dzięki kanałom, użytkownicy mogą wyłączać niektóre rodzaje powiadomień z danej aplikacji jak również kontrolować ich wygląd i zachowanie. Źródło: https://developer.android.com Android 7.1 i niższe mają tylko jeden kanał.

Powiadomienia - ważność Android wykorzystuje pojęcie ważności powiadomienia, by określić w jaki sposób zaprezentować je użytkownikowi. Im ważniejsze jest powiadomienie, tym więcej czynników wykorzystywanych jest do zwrócenia uwagi użytkownika. Od Androida 8.0 każdy kanał ma właściwość importance, natomiast w starszych wersjach właściwość priority określa ważność powiadomienia. Źródło: https://developer.android.com

Powiadomienia tryb nie przeszkadzać Android 5.0 wprowadził tryb nie przeszkadzać, który wyłącza dźwięki i wibracje dla powiadomień. Źródło: https://developer.android.com Występują 3 poziomy wyciszenia dla tego trybu: 1. Całkowita cisza: wszystko jest blokowane. 2. Tylko alarmy: blokowane są wszystkie powiadomienia poza alarmami. 3. Tylko ważne: użytkownik wybiera, które typy powiadomień przepuszczać.

Powiadomienia - zmiany Historia mechanizmu powiadomień prezentuje się następująco: 1. Android 4.1 Powiadomienia można rozszerzać. Powiadomienia mogą mieć dodatkowe przyciski. Powiadomienia można wyłączać per aplikację. 1. Android 4.4 Integracja powiadomień z Androidem Wear (Wear OS). 1. Android 5.0 Powiadomienia typu heads-up i na ekranie blokady. Tryb nie przeszkadzać. Ważność powiadomień. Anonimizacja powiadomień na ekranie blokady. Grupowanie powiadomień (tylko Wear OS) 1. Android 7.0 Szablony powiadomień i kosmetyczne zmiany wyglądu. Grupowanie powiadomień. Odpowiadanie bezpośrednio z powiadomienia.

Powiadomienia - zmiany Historia mechanizmu powiadomień prezentuje się następująco: 1. Android 8.0 Każde powiadomienie musi być przypisane do jakiegoś kanału. Możliwe jest wyłączanie powiadomień per kanał a nie per aplikacja. Aplikacja wyświetlająca powiadomienie, posiada odznakę nad swoją ikoną. Można ustawić limit czasu dla wyświetlania powiadomienia. Można zmienić kolor tła powiadomienia. Niektóre API przeniesiono do klasy NotificationChannel.

Powiadomienia Notification Manager Nie można powołać instancji tej klasy bezpośrednio. Pobierana jest jedynie referencja przez getsystemservice ( String ). Przykład: String servname = Context.NOTIFICATION_SERVICE; notificationmanager = (NotificationManager) getsystemservice (servname); 7

Powiadomienia Notification Builder Mechanizm do wygodnego definiowania elementów powiadomienia. Przykład: Notification noti = new Notification.Builder(Context).setContentTitle( Important message for you... ).setcontenttext(subject).setsmallicon(r.drawable.new_mail).setlargeicon(abitmap).build(); 8

Powiadomienia NotificationCompat Builder Obecnie lepiej wykorzystywać mechanizm z klasy NotificationCompat. Przykład: Notification noti = new NotificationCompat.Builder(Context).setContentTitle( Important message for you... ).setcontenttext(subject).setsmallicon(r.drawable.new_mail).build(); Pamiętaj o dodaniu do build.gradle: dependencies { implementation "com.android.support:support-compat:27.1.1" } 8

Przykład Powiadomienia alled by ACTIONl notiflcation 10

Przykład Powiadomienia 11

Przykład: Powiadomienia MainActivity package com.example.mynotificationmanager; import... public class MainActivity extends Activity implements OnClickListener { NotificationManager notificationmanager; final int NOTIFICATION_ID = 12345; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); findviewbyid(r.id.btnbig).setonclicklistener(this); findviewbyid(r.id.btncancel).setonclicklistener(this); }// oncreate public void createbignotification(view view) { Intent intent = new Intent(this,NotificationReceiverActivity.class); intent.putextra("callerintent", "main"); intent.putextra("notificationid", NOTIFICATION_ID); PendingIntent pintent = PendingIntent.getActivity(this, 0, intent, 0); 12

Przykład: Powiadomienia MainActivity // better way to do previous work PendingIntent pintent1 = makependingintent( NotificationReceiverActivity1.class,"Action1"); PendingIntent pintent2 = makependingintent( NotificationReceiverActivity2.class,"Action2"); PendingIntent pintent3 = makependingintent( NotificationReceiverActivity3.class,"Action3"); // a bitmap to be added in the notification view Bitmap mybitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_large_bitmap); NotificationCompat.Builder basenotification = new NotificationCompat.Builder(this).setContentTitle("TITLE goes here...").setcontenttext("second Line of text goes here").setticker("ticker tape1...ticker tape2...").addaction(r.drawable.icon1, "Action1", pintent1).addaction(r.drawable.icon2, "Action2", pintent2).addaction(r.drawable.icon3, "Action3", pintent3).setsmallicon(r.drawable.icon0).setlargeicon(mybitmap).setlights(0xffcc00, 1000, 500).setContentIntent(pIntent) ; 13

Przykład: Powiadomienia MainActivity Notification noti = new Notification.InboxStyle(baseNotification).addLine("Line-1").addLine("Line-2").addLine("Line-2").setSummaryText("SUMMARY-Line-1 here").build(); notificationmanager = (NotificationManager) getsystemservice(notification_service); // Hide the notification after its selected noti.flags = Notification.FLAG_AUTO_CANCEL; // notification ID is 12345 notificationmanager.notify(12345, noti); }// createbignotification @Override public void onclick(view v) { switch (v.getid()) { case R.id.btnBig: createbignotification(v); break; 14

Przykład: Powiadomienia MainActivity case R.id.btnCancel : try { if ( notificationmanager!= null){ notificationmanager.cancel(notification_id); } } catch (Exception e) { Log.e("<<MAIN>>", e.getmessage() ); } break; } }// onclick { public PendingIntent makependingintent(class partnerclass, String callername) } Intent intent = new Intent(this, partnerclass); intent.putextra("callerintent", callername); intent.putextra("notificationid", NOTIFICATION_ID); PendingIntent pintent = PendingIntent.getActivity(this, 0, intent, 0); return pintent; }// class 15

Przykład: Powiadomienia NotificationReceiverActivity package com.example.mynotificationmanager; import... public class NotificationReceiverActivity extends Activity { @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.result); String callername = getintent().getstringextra("callerintent"); } } Toast.makeText(this, "Called by: " + callername, 1).show(); 16

Przykład: Manifest Powiadomienia <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mynotificationmanager" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="14" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" ><activity android:name=".mainactivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".notificationreceiveractivity" android:icon="@drawable/icon0" > </activity> 17

Przykład: Manifest Powiadomienia <activity android:name=".notificationreceiveractivity1" android:icon="@drawable/icon1" > </activity> <activity android:name=".notificationreceiveractivity2" android:icon="@drawable/icon2" > </activity> <activity android:name=".notificationreceiveractivity3" android:icon="@drawable/icon3" > </activity> </application> </manifest> 18

Przykład - Układ: Powiadomienia main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/btnbig" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="create Big Notification" android:ems="20" > </Button> <Button android:id="@+id/btncancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cancel Notification" android:ems="20" > </Button> </LinearLayout> 19

Przykład - Układ: Powiadomienia main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/txtmsg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="called from the MASTER notification" > </TextView> </LinearLayout> 20

Powiadomienia Priorytet Definiuje sposób w jaki system wyświetli powiadomienie w odniesieniu do pozostałych. Przykład:.setPriority(NotificationCompat.PRIORITY_HIGH) Występuje 5 poziomów priorytetów: PRIORITY_MIN (-2) do PRIORITY_MAX (2). Priorytet powyżej 0 skutkuje powiadomieniem heads-up. Należy wykorzystywać najmniejsze możliwe priorytety w danej sytuacji. Domyślne ustawienia (dźwięk, wibracja, dioda):.setdefaults(notificationcompat.default_all) 8

Powiadomienia - style Big text Umożliwia zmieszczenie większej ilości tekstu niż standardowe powiadomienie. NotificationCompat. BigTextStyle Źródło: https://legacy.gitbook.com/book/google-developer-training/android-developer-fundamentals-course-practicals

Powiadomienia - style Big image Umożliwia dodanie dowolnego zdjęcia do powiadomienia. NotificationCompat.BigPictureStyle mnotifybuilder.setstyle(new NotificationCompat.BigPictureStyle().bigPicture(myBitmapImage).setBigContentTitle("Notification!")); Źródło: https://legacy.gitbook.com/book/google-developer-training/android-developer-fundamentals-course-practicals

Powiadomienia - style Media Zawiera akcje do kontroli odtwarzacza multimediów wraz z wyświetlaniem okładki albumu. NotificationCompat.MediaStyle Źródło: https://legacy.gitbook.com/book/google-developer-training/android-developer-fundamentals-course-practicals

Powiadomienia - progres Progress bar Pasek postępu dla zadań, które można anulować. Nie jest to styl!.setprogress(100, incr, false) Źródło: https://legacy.gitbook.com/book/google-developer-training/android-developer-fundamentals-course-practicals

Powiadomienia Aktualizacja 1. Stwórz nowe powiadomienie, z zaktualizowaną treścią. 2. Wyświetl powiadomienie, wykorzystując metodę notify(), podając ten sam identyfikator powiadomienia co wcześniej. Jeżeli poprzednie powiadomienie jest widoczne system dokona aktualizacji. Jeżeli poprzednie powiadomienie nie jest widoczne system stworzy nowe. Użytkownik może usunąć powiadomienie (jeżeli tak określono). Programowo należy wywołać cancel() lub cancelall(): mnotifymanager.cancel(notification_id); 8

Powiadomienia Pytania? 32