Programowanie na Androida krok po kroku – cz.10 – obsługa powiadomień

W poprzedniej części kursu poznaliśmy jak zapisywać i odczytywać dane z pamięci wewnętrznej. Dziś pokażę wam jak wykorzystać powiadomienia. Poznamy jak wykorzystać bardziej rozbudowany system powiadomień wprowadzony do wersji 4.1 zielonego robocika.

Do czego używane są powiadomienia?

Na początek chciałbym was uświadomić do czego warto system powiadomień użyć. Najczęściej spotykane zastosowania powiadomień to informowanie użytkownika o:

  • nadejściu wiadomości tekstowej lub wiadomości e-mail,
  • nieodebranych połączeniach telefonicznych,
  • nadchodzącym wydarzeniu z kalendarza,
  • postępie pobierania danych z zewnętrznych źródeł.

Dwa podstawowe typy powiadomień:

Najprostsze powiadomienie, znane jeszcze z czasów starszych wersji Androida wygląda następująco:

noti_101

 

Składa się ono z sześciu elementów. Istnieje jeszcze bardziej rozbudowane powiadomienie, które obsługuje tylko Android w wersji 4.1 lub wyższej.

noti_102

 

Takie powiadomienie może zawierać jeszcze przyciski, które służą do wykonania określonej akcji bez potrzeby uruchamiania programu.

Obsługa powiadomień

Zabierzmy się więc za napisanie obsługi powiadomień. Na początku napiszmy najprostsze powiadomienie, kompatybilne z większością urządzeń.

1. Utwórzmy następujące przyciski – posłużą nam one na zapas:

 

2. Oto kod tworzący powiadomienie wraz w wyjaśnieniem każdej linijki:

 

  • PendingIntent to rodzaj intencji, który pozwala np.  na użycie uprawnień innej aplikacji podczas jej wywoływania. Jest ona często używana do launcherach. Aby nasze powiadomienia działały poprawnie (a dokładnej auto usuwanie powiadomienia) musimy to wykorzystać.
  • Nie wszystkie parametry NotificationBuilder muszą być wykorzystanie. Dałem ich jak najwięcej, aby pokazać w jaki sposób możemy je wykorzystać.
  • Parametr setAutoCancel powoduje, że powiadomienie jest usuwanie po otworzeniu aplikacji. Natomiast parametr setOutgoing powoduje, że jest one nie do usunięcia. Połączenie tych dwóch parametrów powoduje, że jedyną metodą na usunięcie powiadomienia jest kliknięcie w niego.

3. Oto efekt użycia pierwszego przycisku:

Bez tytułu

 

4. Teraz wykonamy bardziej rozbudowane powiadomienie. Będzie zawierało ono więcej pozycji:

1

 

  • Sprawa kompatybilności: Co się stanie jeśli użyjemy naszej aplikacji na wersji androida starszej niż 4.1? Zostanie wyświetlone zwykłe powiadomienie, takie jak w poprzednim punkcie. Taki kod też tam się znajduje. Jednakże musimy uważać, aby nasze powiadomienie wyglądało spójnie nawet na starszych wersjach.

5. Całość wygląda podobnie jak pokazywałem na początku tej części kursu:

Bez tytułu

6. Teraz ostatni typ powiadomienia, który będzie zawierał przyciski.

1

 

  • Dla obu przycisków przyporządkowałem tą samą intencję, lecz inne ikony. Nic nie stoi na przeszkodzie aby wywoływać inne intencje. Robimy to w podobny sposób jak tutaj.

7. Taki typ powiadomienia wygląda następująco:

Bez tytułu

 

8. Poznaliśmy jak wyświetlać powiadomienia. Przy tworzeniu pierwszego typu powiadomienia wspomniałem o parametrze setOutgoing, który powoduje, że nie da się tradycyjnie pozbyć powiadomienia. Można to zrobić zabijając aplikację lub dodając kod w naszej aplikacji. Teraz napiszemy metodę. która będzie miała za zadanie pozbyć się wszystkich powiadomień. Jako, iż nasze powiadomienia miały swoje id będziemy je zamykać podając id. Na koniec wywołamy metodę, która na wszelki wypadek spróbuje usunąć wszystkie powiadomienia z naszej aplikacji.

1

 

  • Używanie metod Cancel i CancelAll jest bezsensowne, ponieważ metoda CancelAll zrobi to samo. za jednym zamachem. Napisałem tak celowo, aby pokazać odwoływanie się do powiadomień indywidualnie i zbiorowo.

9. Na koniec widok wszystkich powiadomień razem:

Bez tytułu

To koniec dzisiejszej części kursu. Mam nadzieję, że zrozumieliście działanie systemu powiadomień w Androidzie. Na koniec odwołuję do dokumentacji tego systemu. Zawarte są tam wszystkie metody potrzebne do napisania dobrej aplikacji: http://developer.android.com/reference/packages.html

Standardowo dorzucam nasz kod od powiadomień: Powiadomienia

Na koniec nie pozostało mi nic innego jak zaprosić was do czytania kolejnych części cyklu.