Systemy operacyjne dla urządzeń mobilnych
    Zaliczenie odbędzie się 10 czerwca mniej więcej o godzinie 18:45 (zaraz po zaliczeniu z ,,Sieci 1'') w sali 308
  1. 2015-02-25 Zajęcia organizacyjne.
  2. 2015-03-04 Android - podstawy i pierwsza aplikacja
    • Materiały
    • Projekt numer 1: napisać aplikację spełniającą następujące warunki
      • Na ekranie głównym aplikacji widoczne jest jedno pole tekstowe (textMessage) i przycisk Send.
      • Naciśnięcie przycisku Send powoduje
        • przejście do kolejnego ekranu (ActivityShowMessage);
        • wypisania na ekranie ActivityShowMessage tekstu wpisanego w pole textMessage.
    • Co po tych zajęciach powinno się znać / wiedzieć / umieć
      • Znać i umieć opisać poszczególne składniki prostej aplikacji.
      • Opisać znaczene pliku Manifest.
      • Czym są zasoby i jak są reprezentowane.
  3. 2015-03-11 Zarządzanie cyklem życia i stanem
    • Materiały
    • Projekt numer 2: napisać aplikację spełniającą następujące warunki
      • Apliacja składa się z 3 ekranów (aktywności).
      • Ekran 1:
        • Zawiera przycisk 'End' służący do kończenia aplikacji.
        • Zawiera przycisk 'Go to Activity 2' służący do prześcia do kolejnego ekranu.
        • Kontrolkę Chronometer wyświetlającą upływ czasu.
      • Ekran 2:
        • Nie zawiera żadnych komponentów.
      • Ekran 3:
        • Zawiera zwykłe pole tekstowe. Posłuży do testowania automatycznego zapamiętywania i odtwarzania pewnych wartości przy zmianie konfiguracji (na przykład orientacji ekranu); wpisana wartość nie powinna zostać utracona i jest to nadzorowane przez system.
        • Pole tekstowe wyswietlające stan licznika zmienianeg przy każdej zmianie konfiguracji a zapamiętywanego i odtwarzanego wraz ze stanem egzemplarza aplikacji.
        • Wyświetla powiadomienie typu Toast związane z obsługą stanu egzemplarza niezwiązanego z konfiguracją. Treścią powiadomienia jest bieżąca data i czas.
      • W każdym z ekranów powinny zostać nadpisane metody związane z cyklem życia pozwalając śledzić moment kiedy zostaną wywłane (najlepiej w postaci powiadomień).
    • Co po tych zajęciach powinno się znać / wiedzieć / umieć
      • Opisać cykl żaplikacji.
      • Określić związek pomiędzy identyfikatorem użytkowniak, procesem, wątkiem itd.
      • Opisać cykl życia aktywności.
  4. 2015-03-18, 2015-03-24 Hierarchie widoków i ich wyświetlanie
  5. 2015-04-01 Intencje
    • Rozdział 4: Intencje i usługi, podrozdział 4.1 i 4.2 z [ableson, 2011]
    • Intents and Intent Filters
    • Common Intents
    • Interacting with Other Apps
    • Android Intents - Tutorial (Data transfer between activities)
    • Projekt numer 3: Intencje
      Na projekt składają się trzy aplikacje:
      • IntentTesterAdd Aplikacja nie posiada żadnego interejsu. Uruchomiona powinna wyświetlić komunikat Starting add subactivity a następnie No arguments at all oznaczający, że nie przekazano do aplikacji żadnych argumentów.
      • IntenetTesterSub - aplikacja działa jak IntenetTesterAdd, ale wykonuje odejmowanie.
      • IntentTesterMainSimple Aplikacja powinna posiadać proste interfejs (patrz film) pozwalajacy na wprowadzenie dwóch liczb całkowitych oraz przycisk który powoduje wywołanie innych aplikacji w oparciu o intencje. Rodzaj intencji należy tak wybrać aby wywoływane były aplikacje IntentTesterAdd oraz IntentTesterSub dając użytkownikowi możliwość wyboru która z aplikacji na zostać użyta. Po zatwierdzeniu wybrana aplikacja powinna dokonać obliczeń i odesłać wynik, który powinien zostać zaprezentowany w oknie aplikacji IntentTesterMainSimple
      Szczegóły działania widoczne są na filmie swf, mp4
    • Co po tych zajęciach powinno się znać / wiedzieć / umieć
      • Co to jest intencja? Do czego służą intencje?
      • Mechanizm przekazywania danych i odpowiedzi z wykorzystaniem intencji.
  6. 2015-04-08 BroadcastReceiver, Toasts, Notifications
    • Rozdział 4: Intencje i usługi, podrozdział 4.3 z [ableson, 2011]
    • Rozdział 8: Powiadomienie i alarmy, podrozdział 8.1 oraz 8.2 z [ableson, 2011]
    • Broadcast Receivers
    • Toasts
    • Android Notifications
    • Notifications
    • Android Notifications
    • Projekt numer 4: BroadcastReceiver
      Na projekt składają się trzy aplikacje:
      • BroadcastGenerator Aplikacja główna posiadająca dwa przyciski Send Broadcast oraz Send Ordered Broadcast pozwalające rozesłać własny event metodą odpowiednio sendBroadcast lub sendOrderedBroadcast. W przypadku użycia metody sendOrderedBroadcast aplikacja oczekuje na dane zwrotne.
      • BroadcastReceiverFirst aplikacja wyświetla powiadomienie typu Toast oraz Notifications w momencie otrzymania event-u. Jeśli event jest wynikiem wywołania metody sendOrderedBroadcast, jako inofrmacja zwrotna wykorzystywana jest nazwa klasy (w tym przypadku: BroadcastReceiverFirst) oraz bieżący czas.
      • BroadcastReceiverSecond aplikacja działa jak BroadcastReceiverFirst.
    • Co po tych zajęciach powinno się znać / wiedzieć / umieć
      • Co to jest BroadcastReceiver?
      • Umieć opisać mechanizmy powiadomiń oparte o Toasts oraz Notifications.
  7. 2015-04-15 Services
  8. 2015-04-22 Bluetooth
  9. 2015-05-06 Sieci oraz usługi sieciowe - wykorzystanie HTTP
    NOTE: Android also contains the Apache HttpClient library but it is not recommended anymore to use it, as Google is focusing their efforts on improving the HttpURLConnection implementation.
    • Android’s HTTP Clients (why prefer Android's HTTP Clients over Apache HTTP Client)
    • HttpURLConnection
    • How to send HTTP request GET/POST in Java
    • Java HttpURLConnection (how to open and read a url with Java)
    • Java HttpURLConnection Example to send HTTP GET/POST Requests
    • HttpURLConnection’s Dark Secrets
    • Android Networking - Tutorial
    • Android Detect Internet Connection Status
    • Android Internet Connection Status & Network Change Receiver Example
    • How to enable-disable wifi programmatically in android
    • Projekt numer 9: HTTP logger
      Załóżmy, że po planszy o wymiarach 200 x 200 porusza się losowo pewna postać. Przyjmujemy następujące prawdopodobieństwa wykonania następnego ruchu: do przodu 50%, skręt w lewp/prawo 20%, do tyłu 10%. Postać zmienia swoje położenie co 1 sekundę. Napisać aplikację wysyłającą do serwera dane używając adresu URL postaci
        http://fulmanski.pl/zajecia/mobile_os/zajecia/http?login=LOGIN&time=TIME&positionX=X&positionY=Y&ack=ACK
        
      gdzie
        LOGIN to pierwsze 6 liter nazwiska + 1 litera imienia (pisane małymi literami, bez polskich znaków) autora aplikacji
        TIME to data i godzina w formacie: yyyy-mm-dd HH:MM:SS, w przypadku gdy jakaś wartości jest mniejsza niż 10,
        należy ją poprzedzić '0' tak aby zajmowała zawsze dwa znaki: zamiast np. 2015-05-06 (6 maja 2015) powinno być: 2015-05-06.
        X współrzędna x postaci
        Y współrzędna y postaci
        ACK przyjmuje wartość 'true' gdy chcemy otrzymać od serwera potwierdzenie lub 'false' w przeciwnym razie
        (zamiast ack=false można także zwyczajnie ten parametr pominąć).
        
      Co 30 sekund należy wysłać do serwera dane z prośbą o potwierdzenie (parametr ack=true) i wyświetlić otrzymaną wartość potwierdzenia.

      Wykorzystanie adresu URL postaci
        http://fulmanski.pl/zajecia/mobile_os/zajecia/http?login=LOGIN
        
      pozwala na pobranie wszystkich zalogowanych przez użytkownika danych.

      Serwer odpowiada na kierowane do niego zapytania w następujący sposób
        error_no_space - gdy osiągnięto limit zalogowanych danych (trzeba wówczas napisać do mnie i wyczyszczę bazę)
        error_check_space, error_insert, error_select - gdy wystąpią roblemy z działaniem skryptu (proszę wówczas o wiadomość)
        error_missing_some_data - gdy pominięto jedną z danych: login, time, positionX, positiony
        ok - gdy udała się operacja dodania informacji
        odsyła przesłane dane, gdy parametr ack=true
        
    • Co po tych zajęciach powinno się znać / wiedzieć / umieć
      • Umieć opisać działania niezbędne do nawiązania komunikacji opartej o protokół HTTP.
  10. 2015-05-13 Zapisywanie danych
    • Saving Data
    • Data Storage
    • Projekt numer 10: Saving Data: Key_Value Sets
      Wykorzystując SharedPreferences napisz dwie aplikacje: pierwsza zapisuje pewne dane jako prywatne i inne jako współdzielone. Druga - odczytuje współdzielone.
    • Projekt numer 11: Saving Data: Files
      Napisz aplikację pozwalającą wybrać lokalizaję w której mają być zapisane dane (dane mogą być dowolne, na przykład tekst "witaj świecie"+aktualny czas: albo External Storage albo Internal Storage.
    • Co po tych zajęciach powinno się znać / wiedzieć / umieć
      • Umieć opisać różnce pomiędzy External Storage a Internal Storage.
  11. 2015-05-20 Content provider as the best way to share data across applications
  12. 2015-05-27 Praca nad projektami
  13. 2015-06-03 Praca nad projektami
  14. 2015-06-10 Praca nad projektami
  15. XXXX-XX-XX Dodatkowe zagadnienia dla chętnych - alarmy
  16. XXXX-XX-XX Dodatkowe zagadnienia dla chętnych - problem zmiennych globalnych w Androidzie

Dodatkowe materiały