Systemy operacyjne dla urządzeń mobilnych
Informacje o ocenach
  1. 2016-02-24
    • Wykład iOS - Objective-C: wprowadzenie
      • Materiały
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • "Rodowód" Objective-C?
        • W jaki sposób utworzyć tekstowy (nieobiektowy) program w Objective-C.
        • Tworzenie kod Objective-C zgodnego z C.
        • Tworzenie prostych programów w Objective-C / C.
        • Podstawy kontroli wersji w Xcode.
    • Ćwiczenia Android - podstawy i pierwsza aplikacja
      • Materiały
      • Projekt numer 1: (moja wersja) 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.
  2. 2016-03-02
    • Wykład iOS - Objective-C, klasy, część I
      • Materiały
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Jak utworzyć prostą klasę ze składowymi prywatnymi i publicznymi oraz metodami bez/z parametrami.
        • Czym są właściwości (zmienne deklarowane z dyrektywą @properties).
        • Konstruktory.
        • Zmienne i metody klasowe.
        • Inicjalizacja klasy.
    • Ćwiczenia Android - zarządzanie cyklem życia i stanem aplikacji
      • 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 przejścia do kolejnego ekranu.
          • Kontrolkę Chronometer wyświetlającą upływ czasu.
        • Ekran 2:
          • Zawiera przycisk Go to Activity 3 służący do prześcia do kolejnego ekranu.
        • Ekran 3:
          • Zawiera zwykłe pole tekstowe. Posłuży ono 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 (nadpisz metodę onSaveInstanceState oraz onRestoreInstanceState).
          • Wyświetla powiadomienie typu Toast (w standardowej postaci co realizowane jest w jednej linii kodu; bardziej zaawansowane powiadomienia typu Toast będą na kolejnych zajęciach) związane z obsługą stanu egzemplarza niezwiązanego z konfiguracją (nadpisz metodę onRetainNonConfigurationInstance a przy odtwarzaniu wykorzystaj metodę getLastNonConfigurationInstance). 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ń, tj. Notification). W przykładowym kodzie z prezentacji zrobiono to za pomocą dodatkowej klasy bazowej zajmującej się tylko i wyłącznie wyświetlaniem tego typu powiadomień (class LifecycleActivity extends Activity). Klasy tej używamy do utworzenia głównej klasy naszej aplikacji (pierwszej aktywności; class Main extends LifecycleActivity). W klasie bazowej pokazano nadpisane metody: onCreate, onStart, onResume, onPause
        • Proszę porównać oczekiwane działanie z opisem mojej realizacji tego projektu. Jest tam także cała kompletna i przebudowana klasa będąca odpowiednikiem klasy LifecycleActivity z aktywności. Użyte w niej powiadomienia typu Notification będą tematem kolejnych zajęć, więc można za bardzo nie wnikać w kod z tym związany.
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Opisać cykl życia aktywności.
  3. 2016-03-09
    • Wykład iOS - Objective-C, klasy, część II
      • Materiały
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Czym są i jak działają selektory.
        • Czym są i jak działają protokoły.
        • Czym są i jak działają categorie.
        • Czym są i jak działają rozszerzenia.
        • Czym są i jak działają bloki.
    • Ćwiczenia Android - powiadomienia typu Toast i Notification
  4. 2016-03-16
    • Wykład iOS - typy danych w Objective-C
      • Materiały
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Cechy podstawowych typów danych: primitives, NSNumber, NSDecimalNumber, NSString, NSSet, NSArray, NSDictionary, Dates
    • Ćwiczenia Android - hierarchie widoków i ich wyświetlanie
      • Materiały
      • Projekt numer 4: napisać aplikację spełniającą następujące warunki
        • Na ekranie głównym powinny zaleźć się przyciski
          • FrameLayout
          • LinearLayout (Horizontal)
          • TableLayout
          • GridLayout
          • RelativeLayout
        • Ekran główny powinien mieć rozmieszczone elementy w oparciu o układ LinearLayout (Vertical).
        • Naciśnięcie przycisku powinno skutkować uruchomieniem nowej aktywności, w której elementy rozmieszczone są w oparciu o układ którego nazwa widnieje na naciskanym przycisku.
        • Wszystkie ekrany (z wyjątkiem głównego) powinny zawierać takie same elementy.
        • Proszę wykorzystać motyw do zmiany cech grupy elementów. Na przykład jeśli rozmieszczanymi elementami w aktywnościach będą przyciski, wówczas można za pomocą motywu okeślić jak one mają wyglądać.
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Znać podstawowe układy.
        • Wiedzieć co to jest styl i podać prosty przykład użycia.
        • Wiedzieć co to jest motyw i podać prosty przykład użycia.
  5. 2016-03-23
    • Wykład, Ćwiczenia iOS - piszemy program w Objective-C
      • Materiały
          Napisać program dla biegaczy spełniający poniższe założenia
          • Aplikacja powinna wczytywać dane z pliku tekstowgo.
          • Dane z jednego treningu zawarte są w jednej linii.
          • Dane opisane są w postaci
            [data] [odległość w metrach] [czas biegu]
            							
          • Dane z jednego treningu powinny być przechowywane w obiekcie.
          • Wszystkie treningi (obiekty z treningami) powinny być przechowywane w tablicy.
          Rozwiązanie
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Umieć napisać prosty program w Objective-C
  6. 2016-03-30
    • Wykład, Ćwiczenia Intencje
      • Materiały
      • Projekt numer 5: Na projekt składają się trzy aplikacje:
        • IntentTesterAdd Aplikacja nie posiada żadnego interfejsu. Uruchomiona powinna wyświetlić komunikat typu Toast o treści 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 na stronie z moim rozwiązaniem tego zadania) 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 ma zostać użyta. Po zatwierdzeniu wybrana aplikacja powinna dokonać obliczeń i odesłać wynik, który powinien zostać zaprezentowany w oknie aplikacji IntentTesterMainSimple
        • UWAGA: zadanie także można zrealizować tworząc jedną aplikację.
      • 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.
  7. 2016-04-06
    • Wykład iOS - pierwsza aplikacja
      • Materiały
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Co to jest wzorzec MVC i dlaczego go używamy.
        • Co oznaczają terminy action oraz outlets w kontekście aplikacji dlasystemu iOS.
    • Ćwiczenia Android - ListView
      • Materiały
      • Projekt numer 6: napisać aplikację wyświetlającą informacje w postaci listy
        • Na ekranie głównym powinny zaleźć się trzy przyciski
          • One string item
          • Simple item layout
          • Two strings item
          • Custom
        • Naciśnięcie przycisku One string item powinno wyświetlić ekran na którym elementy wyświetlone zostały za pomocą gotowego stylu (pojedynczych) elementów listy, który zapisany jest pod stałą android.R.layout.simple_list_item_1. Do realizacji tego zadania można wykorzystać następujące pozycje z listy powyżej: 1 (pierwsza część).
        • Naciśnięcie przycisku Simple item layout powinno wyświetlić ekran na którym elementy wyświetlone zostały za pomocą zmodyfikowanych pojedynczych elementów listy (nadal mamy jako element listy jeden napis, ale jego własności mogą być określone w pliku XML definiującym pojedynczy element listy jakim jest TextView). Do realizacji tego zadania można wykorzystać następujące pozycje z listy powyżej: 2, 3.
        • Naciśnięcie przycisku Two strings item powinno wyświetlić ekran na którym elementy wyświetlone zostały za pomocą gotowego stylu (podwónych) elementów listy, który zapisany jest pod stałą android.R.layout.simple_list_item_2. Do realizacji tego zadania można wykorzystać następujące pozycje z listy powyżej: 4, 5.
        • Naciśnięcie przycisku Custom powinno wyświetlić ekran na którym elementy wyświetlone zostały za pomocą niestandadowego stylu. Do realizacji tego zadania można wykorzystać następujące pozycje z listy powyżej: 1 (druga część), 6 (część 4. Custom adapter implementations), 7
        • W każdym z przypadków po naciśnięciu elementu listy powinien pojawić się komunitak typu Toast wyświetlający jako swoją treść tekst znajdujący się na wybranym elemencie listy.
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Czym jest ListView i co jest wymagane do poprawnego skonfigurowania jego działania.
        • Czym jest ArrayAdapter.
  8. 2016-04-13 Zajęcia odwołane z powodu godzin rektorskich.
  9. 2016-04-20
    • Wykład iOS - komponenty interfejsu użytkownika
    • Ćwiczenia Zapisywanie danych
      • Materiały
      • Projekt numer 7: Saving Data: Key-Value Sets (do realizacji tego zadania można wykorzystać następujące pozycje z listy powyżej: 1)
        • Wykorzystując SharedPreferences napisz aplikację zapisującą pewne dane jako prywatne. Nie zapisujemy danych jako współdzielone: jest to możliwe, ale zdecydowanie niezalecane.
      • Projekt numer 8: Saving Data: Files (do realizacji tego zadania można wykorzystać następujące pozycje z listy powyżej: 2)
        • Napisz aplikację zapisującą
          • dane prywatne (podobnie jak poprzednio nie zapisujemy danych jako współdzielone: jest to możliwe, ale zdecydowanie niezalecane) w Internal Storage,
          • dane prywatne i publiczne w External Storage.
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Umieć opisać różnce pomiędzy External Storage a Internal Storage.
  10. 2016-04-27
    • Ćwiczenia Dialogs
      • Materiały
      • Projekt numer 9: Napisać aplikację, która po naciśnięciu przycisku wyświetli odpowiednie okno dialogowe
        • Naciskając przycisk Simple wyświetlone zostanie zwykłe okno dialogowe posiadajće tytuł, treść w części centralnej i przyciski Yes, No oraz Cancel. Naciśnięcie każdego z przycisków powinno skutkować zamknięciem okna i wywietleniem odpowiedniego powiadomienia typu Toast.
        • Naciskając przycisk Simple list wyświetlone zostanie okno dialogowe w postaci zwykłej listy.
        • Naciskając przycisk List with radio wyświetlone zostanie okno dialogowe zawierające elementy typu radio button.
        • Naciskając przycisk List with checkboxes wyświetlone zostanie okno dialogowe zawierające elementy typu checkbox.
        • Naciskając przycisk Custom wyświetlone zostanie niestandardowe (tj. posiadające zaprojektowany przez nas układ) okno dialogowe.
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Omówić sposób tworzenia dialogów.
  11. 2016-05-11
    • Ćwiczenia BroadcastReceiver
      • Materiały
      • Projekt numer 10: Na projekt składają się trzy aplikacje
        1. 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 i je wyświetla.
        2. BroadcastReceiverFirst aplikacja wyświetla powiadomienie typu Toast w momencie otrzymania event-u. Jeśli event jest wynikiem wywołania metody sendOrderedBroadcast, jako informacja zwrotna wykorzystywana jest nazwa klasy (w tym przypadku: BroadcastReceiverFirst) oraz bieżący czas.
        3. BroadcastReceiverSecond aplikacja działa jak BroadcastReceiverFirst.
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Co to jest BroadcastReceiver.
  12. 2015-05-18 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.
    • Ćwiczenia BroadcastReceiver
      • Materiały
      • Projekt numer 11: HTTP logger
        1. Napisać aplikację wysyłającą do serwera dane używając adresu URL postaci
          http://fulmanski.pl/zajecia/mobile_os/common/http?login=LOGIN&time=TIME&type=TYPE&value=VALUE&ack=ACK
          
          np.
          
          http://fulmanski.pl/zajecia/mobile_os/common/http/?login=fulmanp&time=2016-05-16%2009:37:00&type=int&value=1234&ack=true
          
          gdzie
          LOGIN (VARCHAR 32) 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.
          
          TYPE rodzaj logowanej danej; dopuszczalne wartości to: 'string', 'int', 'float'.
          
          VALUE wartość logowanej danej.
          
          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ąć).
          
        2. 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, type, value
          ok - gdy udała się operacja dodania informacji
          odsyła przesłane dane, gdy parametr ack=true
          
        3. Aplikacja powinna mieć interfejs pozwalający na wysłanie tych trzech rodzajów danych.
        4. Wysłanie powinno następować w wyniku naciśnięcia przycisku.
        5. Wykorzystanie adresu URL postaci
          http://fulmanski.pl/zajecia/mobile_os/common/http?login=LOGIN
          
          np.
          
          http://fulmanski.pl/zajecia/mobile_os/common/http/?login=fulmanp
          
          pozwala na pobranie wszystkich zalogowanych przez użytkownika danych.
      • Co po tych zajęciach powinno się znać / wiedzieć / umieć
        • Umieć opisać działania niezbędne do nawiązania komunikacji opartej o protokół HTTP.
  13. 2016-06-01
  14. 2016-06-08

Dodatkowe materiały